Comprendre les fonctions GROUP BY et agrégation de SQL : une image plus claire
Les capacités d'agrégation de données de SQL sont puissantes, mais l'interaction entre GROUP BY
et les fonctions d'agrégation peut prêter à confusion. Une erreur fréquente consiste à sélectionner des colonnes non agrégées dans l'instruction SELECT
après avoir utilisé GROUP BY
sans les répertorier explicitement dans la clause GROUP BY
.
Par exemple :
<code class="language-sql">SELECT * FROM order_details GROUP BY order_no</code>
Cette requête échouera, générant une erreur car '*' ne fait pas partie de la clause GROUP BY
. La solution consiste à répertorier toutes les colonnes non agrégées dans la clause GROUP BY
.
Cependant, l'utilisation de fonctions d'agrégation modifie le comportement :
<code class="language-sql">SELECT SUM(order_price) FROM order_details GROUP BY order_no</code>
Cela additionne avec succès les prix de commande pour chaque order_no
, même sans order_price
dans la clause GROUP BY
. Les fonctions d'agrégation calculent sur toutes les lignes de chaque groupe, que les colonnes correspondantes figurent ou non dans la liste GROUP BY
.
Pour éviter les malentendus, n'oubliez pas qu'après un regroupement par attribut, vous ne pouvez pas accéder directement à d'autres attributs non inclus dans l'expression GROUP BY
. Seules les fonctions d'agrégation donnent accès à ces attributs via des calculs basés sur des groupes.
Standard SQL (contrairement à MySQL) impose l'inclusion explicite de toutes les colonnes non agrégées dans la clause GROUP BY
. Vous pouvez regrouper par sous-ensemble de colonnes tout en sélectionnant des colonnes non agrégées, à condition que ces colonnes fassent partie du GROUP BY
.
Enfin, l'utilisation de plusieurs fonctions d'agrégation avec différentes bases de regroupement peut conduire à des résultats imprévisibles ou ambigus. Combinez GROUP BY
et agrégez soigneusement les fonctions, en vous assurant que le résultat escompté est clair avant d'exécuter la requête.
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!