Oracle
 sql >> Base de données >  >> RDS >> Oracle

GROUP BY / confusion de fonction d'agrégation dans SQL

En SQL standard (mais pas MySQL), lorsque vous utilisez GROUP BY, vous devez lister toutes les colonnes de résultats qui ne sont pas des agrégats dans la clause GROUP BY. Donc, si order_details a 6 colonnes, alors vous devez lister les 6 colonnes (par nom - vous ne pouvez pas utiliser * dans les clauses GROUP BY ou ORDER BY) dans la clause GROUP BY.

Vous pouvez également faire :

SELECT order_no, SUM(order_price)
  FROM order_details
 GROUP BY order_no;

Cela fonctionnera car toutes les colonnes non agrégées sont répertoriées dans la clause GROUP BY.

Vous pourriez faire quelque chose comme :

SELECT order_no, order_price, MAX(order_item)
  FROM order_details
 GROUP BY order_no, order_price;

Cette requête n'est pas vraiment significative (ou n'est probablement pas significative), mais elle "fonctionnera". Il répertoriera chaque numéro de commande et combinaison de prix de commande distincts, et indiquera l'article de commande maximum (numéro) associé à ce prix. Si tous les articles d'une commande ont des prix distincts, vous vous retrouverez avec des groupes d'une ligne chacun. OTOH, s'il y a plusieurs articles dans la commande au même prix (disons 0,99 £ chacun), alors il les regroupera et renverra le nombre maximum d'articles de commande à ce prix. (Je suppose que la table a une clé primaire sur (order_no, order_item) où le premier article de la commande a order_item = 1 , le deuxième élément est 2, etc.)