grouper au moyen de « requête de groupe », qui peut être compris comme « regrouper (Grouper) selon (par) certaines règles » ; sa fonction est de diviser un ensemble de données en plusieurs petites zones selon certaines règles, puis de cibler plusieurs petites zones ; les zones sont utilisées pour le traitement des données. Dans MySQL, GROUP BY est une clause facultative de l'instruction SELECT utilisée pour regrouper les résultats d'une requête en fonction d'un ou plusieurs champs. Elle réduit le nombre de lignes dans l'ensemble de résultats.
L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.
grouper par "requête de groupe".
La déclaration Group By signifie littéralement « Grouper selon (par) certaines règles » en anglais. Sa fonction est de diviser un ensemble de données en plusieurs petites zones selon certaines règles, puis d'effectuer un traitement de données sur plusieurs petites zones.
Dans MySQL, le mot-clé GROUP BY peut regrouper les résultats d'une requête en fonction d'un ou plusieurs champs.
La clause GROUP BY regroupe un ensemble de lignes dans un petit groupe d'enregistrements de lignes récapitulatives par la valeur d'une colonne ou d'une expression. La clause GROUP BY renvoie une ligne pour chaque groupe. En d’autres termes, cela réduit le nombre de lignes dans le jeu de résultats. La clause
GROUP BY est souvent utilisée avec des fonctions d'agrégation telles que SUM, AVG, MAX, MIN et COUNT. Les fonctions d'agrégation sont utilisées dans la clause SELECT pour calculer des informations sur chaque regroupement.
La clause GROUP BY est une clause facultative de l'instruction SELECT. Voici la syntaxe de la clause GROUP BY :
SELECT c1, c2,..., cn, aggregate_function(ci) FROM table WHERE where_conditions GROUP BY c1 , c2,...,cn;
La clause GROUP BY doit apparaître après les clauses FROM et WHERE. Après le mot-clé GROUP BY se trouve une liste de colonnes ou d'expressions séparées par des virgules qui doivent être utilisées comme conditions pour regrouper les lignes.
1. Exemple simple MySQL GROUP BY
Jetons un coup d'œil à la table des commandes dans l'exemple de base de données (yiibaidb). Sa structure est la suivante -
mysql> desc orders;
Supposons. vous souhaitez regrouper les valeurs de statut de commande en sous-groupes, vous devez utiliser la clause GROUP BY et spécifier la colonne de statut pour effectuer le regroupement :
SELECT status FROM orders GROUP BY status;
Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -
.
Vous pouvez le constater, la valeur de statut renvoyée par la clause GROUP BY est unique. Il fonctionne comme l'opérateur DISTINCT, comme indiqué dans la requête suivante :
SELECT DISTINCT status FROM orders;
Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants :
2 MySQL GROUP BY et les fonctions d'agrégation
peuvent être exécutées en utilisant l'agrégat. fonctions Calcule un ensemble de lignes et renvoie une valeur unique. La clause GROUP BY est souvent utilisée avec des fonctions d'agrégation pour effectuer des calculs pour chaque groupe et renvoyer une valeur unique.
Par exemple, si vous souhaitez connaître le nombre de commandes dans chaque statut, vous pouvez utiliser la fonction COUNT et l'instruction de requête de clause GROUP BY, comme indiqué ci-dessous :
SELECT status, COUNT(*) AS total_number FROM orders GROUP BY status;
Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -
Veuillez vous référer aux tableaux suivants des commandes (commandes) et des détails de la commande (orderdetails), leur diagramme ER est présenté ci-dessous -
Pour obtenir le montant total de toutes les commandes par statut, vous pouvez utiliser les détails de la commande table pour connecter la table des commandes et utilisez la fonction SOMME pour calculer le montant total. Veuillez vous référer à la requête suivante :
SELECT status, SUM(quantityOrdered * priceEach) AS amount FROM orders INNER JOIN orderdetails USING (orderNumber) GROUP BY status;
L'exécution de la requête ci-dessus donne les résultats suivants -
De même, la requête suivante renvoie le numéro de commande et le montant total de chaque commande.
SELECT orderNumber, SUM(quantityOrdered * priceEach) AS total FROM orderdetails GROUP BY orderNumber;
Exécutez la requête ci-dessus et obtenez les résultats suivants -
3. Exemple d'expression MySQL GROUP BY
En plus des colonnes, les lignes peuvent être regroupées par expressions. La requête suivante obtient le total des ventes par an.
SELECT YEAR(orderDate) AS year, SUM(quantityOrdered * priceEach) AS total FROM orders INNER JOIN orderdetails USING (orderNumber) WHERE status = 'Shipped' GROUP BY YEAR(orderDate);
Exécutez la requête ci-dessus et obtenez les résultats suivants -
Dans cet exemple, nous utilisons la fonction YEAR pour extraire les données de l'année de la date de commande (orderDate). Seules les commandes avec le statut Expédiée sont incluses. Notez que les expressions apparaissant dans la clause SELECT doivent être les mêmes que celles de la clause GROUP BY.
Vous pouvez utiliser la clause HAVING pour filtrer les groupes renvoyés par la clause GROUP BY. La requête suivante utilise la clause HAVING pour sélectionner les totaux de ventes annuels à partir de 2013.
SELECT YEAR(orderDate) AS year, SUM(quantityOrdered * priceEach) AS total FROM orders INNER JOIN orderdetails USING (orderNumber) WHERE status = 'Shipped' GROUP BY year HAVING year > 2013;
Exécutez la requête ci-dessus et obtenez les résultats suivants -
标准SQL不允许使用GROUP BY子句中的别名,但MySQL支持此选项。以下查询从订单日期提取年份,并对每年的订单进行计数。该year用作表达式YEAR(orderDate)的别名,它也用作GROUP BY子句中的别名,此查询在标准SQL中无效。
参考以下查询 -
SELECT YEAR(orderDate) AS year, COUNT(orderNumber) FROM orders GROUP BY year;
执行上面查询,得到以下结果 -
MySQL还允许您以升序或降序(标准SQL不能提供)对组进行排序。默认顺序是升序。例如,如果要按状态获取订单数量并按降序对状态进行排序,则可以使用带有DESC的GROUP BY子句,如下查询语句:
SELECT status, COUNT(*) FROM orders GROUP BY status DESC;
执行上面查询,得到以下结果 -
请注意,在GROUP BY子句中使用DESC以降序对状态进行排序。我们还可以在GROUP BY子句中明确指定ASC,按状态对分组进行升序排序。
【相关推荐:mysql视频教程】
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!