Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

GROUP BY / confusão de função agregada no SQL


No SQL padrão (mas não no MySQL), ao usar GROUP BY, você deve listar todas as colunas de resultado que não são agregadas na cláusula GROUP BY. Portanto, se order_details tem 6 colunas, então você deve listar todas as 6 colunas (por nome - você não pode usar * nas cláusulas GROUP BY ou ORDER BY) na cláusula GROUP BY.

Você também pode fazer:
SELECT order_no, SUM(order_price)
  FROM order_details
 GROUP BY order_no;

Isso funcionará porque todas as colunas não agregadas estão listadas na cláusula GROUP BY.

Você poderia fazer algo como:
SELECT order_no, order_price, MAX(order_item)
  FROM order_details
 GROUP BY order_no, order_price;

Esta consulta não é realmente significativa (ou provavelmente não é significativa), mas 'funcionará'. Ele listará cada combinação de número de pedido e preço de pedido separado e fornecerá o item de pedido máximo (número) associado a esse preço. Se todos os itens em um pedido tiverem preços distintos, você terminará com grupos de uma linha cada. OTOH, se houver vários itens no pedido com o mesmo preço (digamos £ 0,99 cada), ele os agrupará e retornará o número máximo do item do pedido nesse preço. (Estou assumindo que a tabela tem uma chave primária em (order_no, order_item) onde o primeiro item do pedido tem order_item = 1 , o segundo item é 2, etc.)