oracle group by怎么用
在oracle中,“group by”关键字需要和SELECT语句一起使用,用于对查询结果进行分组,可以按行或表达式的值将行组合到分组汇总的行中;语法“SELECT 字段列表 FROM 数据表名 GROUP BY 字段名;”。
本教程操作环境:Windows7系统、Oracle 11g版、Dell G3电脑。
Oracle GROUP BY子句简介
GROUP BY 关键字可以根据一个或多个字段对查询结果进行分组。
GROUP BY子句在SELECT语句中用于按行或表达式的值将行组合到分组汇总的行中。 GROUP BY子句为每个分组返回一行。
GROUP BY子句通常与AVG(),COUNT(),MAX(),MIN()和SUM()之类的集合函数一起使用。 在这种情况下,聚合函数返回每个分组的摘要信息。 例如,给定几个类别的产品,AVG()函数返回每个类别中产品的平均价格。
以下说明了Oracle GROUP BY子句的语法:
SELECT 字段列表 FROM 数据表名 GROUP BY 字段名;
GROUP BY子句出现在FROM子句之后。在有提供WHERE子句的情况下,GROUP BY子句必须放在WHERE子句之前。
GROUP BY子句按分组列中的值(如c1,c2和c3)对行进行分组。GROUP BY子句只能包含聚合或分组的列。
如果要指定应该一次计算的多个分组级别,请使用以下ROLLUP语法:
SELECT 字段列表 FROM 数据表名 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教程》
以上就是oracle group by怎么用的详细内容,更多请关注dnjidi.com其它相关文章!
相关阅读
- postgresql的now()与Oracle的sysdate区别说明
- Oracle中Spool命令的使用方法实例
- oracle in长度限制的两个快速解决方法
- Oracle 批处理自动备份bat脚本语句的步骤详解
- inner join和left join之间的区别详解
- mysql、oracle默认事务隔离级别的说明
- oracle 存储过程返回 结果集 table形式的案例
- MySQL版oracle下scott用户建表语句实例
- oracle日期分组查询的完整实例
- Oracle使用like查询时对下划线的处理方法
- Oracle 轻量级实时监控工具 oratop详解
- 详解Oracle 中实现数据透视表的几种方法
- ORACLE数据库对long类型字段进行模糊匹配的解决思路
- Oracle 数据仓库ETL技术之多表插入语句的示例详解
- zabbix agent2 监控oracle数据库的方法
- 详解Mysql和Oracle之间的误区
- oracle是什么公司
- oracle数据库免费吗