In Oracle muss das Schlüsselwort „group by“ zusammen mit der SELECT-Anweisung verwendet werden, um Abfrageergebnisse zu gruppieren. Syntax „SELECT field list“ FROM data table name GROUP BY-Feldname;".
Die Betriebsumgebung dieses Tutorials: Windows 7-System, Oracle 11g-Version, Dell G3-Computer.
Das Schlüsselwort GROUP BY kann Abfrageergebnisse basierend auf einem oder mehreren Feldern gruppieren.
Die GROUP BY-Klausel wird in der SELECT-Anweisung verwendet, um Zeilen nach dem Wert der Zeile oder des Ausdrucks zu gruppierten Zusammenfassungszeilen zu kombinieren. Die GROUP BY-Klausel gibt eine Zeile für jede Gruppe zurück.
GROUP BY-Klausel wird normalerweise mit Aggregatfunktionen wie AVG(), COUNT(), MAX(), MIN() und SUM() verwendet. In diesem Fall gibt die Aggregatfunktion zusammenfassende Informationen für jede Gruppierung zurück. Bei mehreren Produktkategorien gibt die Funktion AVG() beispielsweise den Durchschnittspreis der Produkte in jeder Kategorie zurück.
Das Folgende veranschaulicht die Syntax der Oracle GROUP BY-Klausel:
SELECT 字段列表 FROM 数据表名 GROUP BY 字段名;
Die GROUP BY-Klausel erscheint nach der FROM-Klausel. Wenn eine WHERE-Klausel bereitgestellt wird, muss die GROUP BY-Klausel vor der WHERE-Klausel platziert werden.
GROUP BY-Klausel gruppiert Zeilen nach den Werten in der Gruppierungsspalte wie c1, c2 und c3. Die GROUP BY-Klausel kann nur aggregierte oder gruppierte Spalten enthalten.
Wenn Sie mehrere Gruppierungsebenen angeben möchten, die gleichzeitig berechnet werden sollen, verwenden Sie die folgende ROLLUP-Syntax:
SELECT 字段列表 FROM 数据表名 GROUP BY ROLLUP(c1,c2,c3);
Wir verwenden die folgenden orders
und < code>order_items Tabelle zur Demonstration: 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 Einfaches Beispiel für Oracle GROUP BY