Dans Oracle, le mot-clé "group by" doit être utilisé avec l'instruction SELECT pour regrouper les résultats de la requête. Les lignes peuvent être combinées en lignes récapitulatives regroupées par ligne ou valeur d'expression "SELECT field list" FROM nom de la table de données GROUP. PAR nom du champ ;".
L'environnement d'exploitation de ce tutoriel : système Windows 7, version Oracle 11g, ordinateur Dell G3.
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 est utilisée dans l'instruction SELECT pour combiner des lignes en lignes récapitulatives regroupées par la valeur de la ligne ou de l'expression. La clause GROUP BY renvoie une ligne pour chaque groupe. La clause
GROUP BY est généralement utilisée avec des fonctions d'agrégation telles que AVG(), COUNT(), MAX(), MIN() et SUM(). Dans ce cas, la fonction d'agrégation renvoie des informations récapitulatives pour chaque groupe. Par exemple, étant donné plusieurs catégories de produits, la fonction AVG() renvoie le prix moyen des produits dans chaque catégorie.
Ce qui suit illustre la syntaxe de la clause Oracle GROUP BY :
SELECT 字段列表 FROM 数据表名 GROUP BY 字段名;
La clause GROUP BY apparaît après la clause FROM. Lorsqu'une clause WHERE est fournie, la clause GROUP BY doit être placée avant la clause WHERE.
La clause GROUP BY regroupe les lignes selon les valeurs de la colonne de regroupement telles que c1, c2 et c3. La clause GROUP BY ne peut contenir que des colonnes agrégées ou groupées.
Si vous souhaitez spécifier plusieurs niveaux de regroupement qui doivent être calculés en même temps, utilisez la syntaxe ROLLUP suivante :
SELECT 字段列表 FROM 数据表名 GROUP BY ROLLUP(c1,c2,c3);
Nous utiliserons les ordres
et < suivants table code>order_items pour démonstration : orders
和order_items
表进行演示:
1. Oracle GROUP BY的基本示例
以下语句使用GROUP BY
子句在orders
表中查找唯一的订单状态:
SELECT status FROM orders GROUP BY status;
执行上面查询语句,得到以下结果 -
该语句与使用DISTINCT
运算符的以下语句具有相同的效果:
SELECT DISTINCT status FROM orders;
2. Oracle GROUP BY聚合示例
以下语句返回客户的订单数量:
SELECT customer_id, COUNT( order_id ) FROM orders GROUP BY customer_id ORDER BY customer_id;
执行上面查询语句,得到以下结果 -
在这个例子中,我们按客户编号来分组订单,并使用COUNT()
函数返回每个组的订单数量。
要获得更有意义的数据,可以按以下方式将orders
表与customers
表一起连接:
SELECT name, COUNT( order_id ) FROM orders INNER JOIN customers USING(customer_id) GROUP BY name ORDER BY name;
执行上面查询语句,得到以下结果 -
3. Oracle GROUP BY表达式示例
以下示例按年份对订单进行分组,并返回每年订单的数量。参考以下查询语句 -
SELECT EXTRACT(YEAR FROM order_date) YEAR, COUNT( order_id ) FROM orders GROUP BY EXTRACT(YEAR FROM order_date) ORDER BY YEAR;
执行上面查询语句,得到以下结果 -
在这个例子中,我们使用EXTRACT()
函数从订单的日期中获取年份信息。
与前面的例子不同,这里使用了一个在GROUP BY
子句中返回年份的表达式。
4. Oracle GROUP BY带有ROLLUP示例
以下语句计算销售额并按customer_id
,status
和(customer_id
,status
1. Exemple de base d'Oracle GROUP BY