Comprendre la clause GROUP BY et les fonctions d'agrégation de SQL
L'utilisation de la clause GROUP BY
de SQL conduit souvent à une confusion quant aux attributs accessibles après le regroupement. Précisons :
GROUP BY
et colonnes non agrégées
Tenter d'accéder aux colonnes non agrégées après le regroupement entraîne une erreur « pas une expression GROUP BY ». En effet, chaque groupe peut contenir plusieurs lignes et les valeurs des colonnes non agrégées différeront d'une ligne à l'autre.
Fonctions agrégées : un examen plus approfondi
À l'inverse, les fonctions d'agrégation (comme SUM
, MAX
, AVG
, etc.) peuvent accéder aux colonnes sous-jacentes au sein de chaque groupe même après avoir appliqué GROUP BY
. Ils calculent une valeur récapitulative unique pour l'ensemble du groupe.
Exemple :
Considérez cette requête :
<code class="language-sql">SELECT * FROM order_details GROUP BY order_no;</code>
Cette requête échouera car elle tente de sélectionner toutes les colonnes sans utiliser les fonctions d'agrégation sur les colonnes non agrégées telles que order_price
.
Cependant, il s'agit d'une requête valide :
<code class="language-sql">SELECT SUM(order_price) FROM order_details GROUP BY order_no;</code>
Ici, SUM
traite chaque groupe, en additionnant les order_price
valeurs pour donner un prix total pour chacun order_no
.
Inclure les colonnes non agrégées dans GROUP BY
Pour accéder aux colonnes non agrégées après le regroupement, incluez-les dans la clause GROUP BY
:
<code class="language-sql">SELECT order_no, SUM(order_price) FROM order_details GROUP BY order_no;</code>
Cela récupère correctement chaque order_no
ainsi que son total order_price
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!