- Oracle数据库是什么?
- Oracle 11g安装教程
- Oracle 12C安装
- Oracle数据库和实例
- 连接到Oracle数据库
- Oracle示例数据库
- 导入Oracle示例数据库
- Oracle基础入门
- Oracle数据定义
- Oracle数据类型
- Oracle修改数据
- Oracle查询数据
- Oracle连接表
- Oracle操作符
- Oracle约束
- Oracle高级部分
Oracle Group By子句
在本教程中,您将学习如何使用Oracle GROUP BY
子句将行记录分组。
Oracle GROUP BY子句简介
GROUP BY
子句在SELECT语句中用于按行或表达式的值将行组合到分组汇总的行中。 GROUP BY
子句为每个分组返回一行。
GROUP BY
子句通常与AVG()
,COUNT()
,MAX()
,MIN()
和SUM()
之类的集合函数一起使用。 在这种情况下,聚合函数返回每个分组的摘要信息。 例如,给定几个类别的产品,AVG()
函数返回每个类别中产品的平均价格。
以下说明了Oracle GROUP BY
子句的语法:
SELECT column_list FROM T GROUP BY c1, c2, c3;
GROUP BY
子句出现在FROM
子句之后。在有提供WHERE子句的情况下,GROUP BY
子句必须放在WHERE
子句之前。
GROUP BY
子句按分组列中的值(如c1
,c2
和c3
)对行进行分组。GROUP BY
子句只能包含聚合或分组的列。
如果要指定应该一次计算的多个分组级别,请使用以下ROLLUP
语法:
SELECT column_list FROM T GROUP BY ROLLUP(c1,c2,c3);
Oracle GROUP BY示例
我们将在示例数据库中使用以下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
)对其进行分组:
SELECT customer_id, status, SUM( quantity * unit_price ) sales FROM orders INNER JOIN order_items USING(order_id) GROUP BY ROLLUP( customer_id, status );
执行上面查询语句,得到以下结果 -
在本教程中,您已学习如何使用Oracle GROUP BY
子句将行记录分组。
上一篇:Oracle Like子句
下一篇:Oracle Having子句
扫描二维码
程序员编程王