Comprendre les fonctions GROUP BY et agrégation de SQL
La clauseSQL GROUP BY
regroupe efficacement les lignes en fonction des colonnes spécifiées. Cependant, une confusion survient souvent lors de la sélection de colonnes non incluses dans le regroupement.
Considérez cette requête :
<code class="language-sql">SELECT * FROM order_details GROUP BY order_no;</code>
Cette requête échouera dans de nombreux systèmes de bases de données (comme Oracle) car elle tente de sélectionner toutes les colonnes (*
) tout en les regroupant uniquement par order_no
. Cela viole la règle selon laquelle les colonnes non agrégées doivent faire partie de la clause GROUP BY
.
La solution ? Incluez les colonnes non agrégées dans la clause GROUP BY
à côté des fonctions d'agrégation. Par exemple :
<code class="language-sql">SELECT order_no, SUM(order_price) FROM order_details GROUP BY order_no;</code>
Ici, order_no
est à la fois dans les clauses SELECT
et GROUP BY
, tandis que SUM(order_price)
effectue l'agrégation.
Répondre à la question clé :
Les fonctions d'agrégation peuvent-elles accéder à toutes les colonnes d'un groupe ?
Oui, les fonctions d'agrégation telles que SUM()
fonctionnent sur toutes les lignes de chaque groupe, calculant la valeur globale pour la colonne spécifiée. Dans l'exemple ci-dessus, SUM(order_price)
totalise le prix de chaque order_no
.
Cependant, accéder aux colonnes non agrégées sans les inclure dans la clause GROUP BY
entraîne des erreurs. La base de données ne peut pas déterminer quelle valeur sélectionner parmi plusieurs lignes au sein d'un groupe.
Par conséquent, incluez toujours toutes les colonnes non agrégées dans la clause GROUP BY
, ou limitez la clause SELECT
aux seules fonctions d'agrégation lorsque vous utilisez GROUP BY
.
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!