La clause Group By dans SQL est utilisée pour regrouper les lignes qui ont les mêmes valeurs dans des colonnes spécifiées en lignes récapitulatives. Il est couramment utilisé avec les fonctions agrégées (telles que le nombre, Max, Min, Sum, AVG) pour effectuer des calculs sur chaque groupe de données. Voici comment vous pouvez utiliser la clause Group By:
Syntaxe de base : la syntaxe de base d'un groupe par requête est:
<code class="sql">SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;</code>
Dans cet exemple, column1
est utilisé pour regrouper les données, et aggregate_function(column2)
est appliqué à chaque groupe.
Exemple : Supposons que vous ayez un tableau appelé sales
with Colonnes region
et amount
. Vous souhaitez trouver le montant total des ventes pour chaque région. La requête serait:
<code class="sql">SELECT region, SUM(amount) as total_sales FROM sales GROUP BY region;</code>
Cette requête regroupe les données par la colonne region
et calcule la somme de amount
pour chaque groupe.
Plusieurs colonnes : vous pouvez vous regrouper par plusieurs colonnes en les répertoriant dans la clause Group By, séparées par des virgules. Par exemple:
<code class="sql">SELECT region, product, SUM(amount) as total_sales FROM sales GROUP BY region, product;</code>
Cette requête regroupera les données par region
et product
et calculer la somme de amount
pour chaque combinaison unique de region
et product
.
Lorsque vous utilisez la clause Group By, plusieurs fonctions d'agrégats courantes sont utilisées pour effectuer des calculs sur les données groupées. Ces fonctions comprennent:
Count () : compte le nombre de lignes dans chaque groupe. Par exemple:
<code class="sql">SELECT region, COUNT(*) as number_of_sales FROM sales GROUP BY region;</code>
Sum () : calcule le total d'une colonne numérique dans chaque groupe. Par exemple:
<code class="sql">SELECT region, SUM(amount) as total_sales FROM sales GROUP BY region;</code>
AVG () : calcule la moyenne d'une colonne numérique dans chaque groupe. Par exemple:
<code class="sql">SELECT region, AVG(amount) as average_sale FROM sales GROUP BY region;</code>
Max () : trouve la valeur maximale d'une colonne dans chaque groupe. Par exemple:
<code class="sql">SELECT region, MAX(amount) as max_sale FROM sales GROUP BY region;</code>
Min () : trouve la valeur minimale d'une colonne dans chaque groupe. Par exemple:
<code class="sql">SELECT region, MIN(amount) as min_sale FROM sales GROUP BY region;</code>
Ces fonctions vous permettent de résumer les données de diverses manières, fournissant des informations sur les données groupées.
La clause Have est utilisée en conjonction avec le groupe par clause pour filtrer les résultats groupés en fonction d'une condition. Contrairement à la clause WHERE, qui filtre les lignes avant le regroupement, la clause a filtre les groupes après leur création. Voici comment vous pouvez les utiliser ensemble:
Syntaxe de base : la syntaxe d'une requête combinant le groupe par et ayant est:
<code class="sql">SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1 HAVING condition;</code>
Exemple : Supposons que vous souhaitiez trouver des régions avec des ventes totales supérieures à 10 000 $ du tableau sales
. La requête serait:
<code class="sql">SELECT region, SUM(amount) as total_sales FROM sales GROUP BY region HAVING SUM(amount) > 10000;</code>
Cette requête regroupe d'abord les données par region
, calcule les ventes totales de chaque région, puis filtre les résultats pour inclure uniquement les régions où les ventes totales dépassent 10 000 $.
Combinant avec où : vous pouvez également utiliser où filtrer les lignes avant de se regrouper et de devoir filtrer les groupes. Par exemple:
<code class="sql">SELECT region, SUM(amount) as total_sales FROM sales WHERE amount > 0 GROUP BY region HAVING SUM(amount) > 10000;</code>
Dans cette requête, la clause Where filtre d'abord toutes les lignes avec un montant négatif ou nul, les données sont ensuite regroupées par region
, et la clause filtre les groupes en fonction des ventes totales.
Lorsque vous utilisez la clause Group By dans les requêtes SQL, il y a plusieurs pièges potentiels à éviter:
Références de colonnes incorrectes : Dans une requête avec groupe par, toute colonne de la liste de sélection qui n'est pas une fonction agrégée doit être incluse dans la clause Group By. L'oubli d'inclure une colonne non agrégée dans la clause Group By peut entraîner une erreur ou des résultats inattendus. Par exemple:
<code class="sql">SELECT region, product, SUM(amount) -- This will cause an error if 'product' is not included in GROUP BY FROM sales GROUP BY region;</code>
La bonne version serait:
<code class="sql">SELECT region, product, SUM(amount) FROM sales GROUP BY region, product;</code>
Mélange de colonnes agrégées et non agrégées : Mélanger les colonnes agrégées et non agrégées dans la liste de sélection sans regroupement approprié peut conduire à des résultats inattendus. Par exemple:
<code class="sql">SELECT region, SUM(amount), amount -- This will cause an error because 'amount' is not aggregated FROM sales GROUP BY region;</code>
Pour résoudre ce problème, vous devez être regroupé par amount
ou utiliser une fonction agrégée dessus.
Utilisation d'avoir sans groupe par : la clause ayant des censées est censée être utilisée avec le groupe par. L'utilisation d'avoir sans groupe BY entraînera une erreur dans de nombreuses bases de données SQL. Par exemple:
<code class="sql">SELECT region, SUM(amount) FROM sales HAVING SUM(amount) > 10000; -- This will cause an error because GROUP BY is missing</code>
La bonne version serait:
<code class="sql">SELECT region, SUM(amount) FROM sales GROUP BY region HAVING SUM(amount) > 10000;</code>
En étant conscient de ces pièges, vous pouvez écrire un groupe plus efficace et efficace par des requêtes.
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!