Oracle 专题
专题目录
您的位置:database > Oracle专题 > Oracle Group By子句
Oracle Group By子句
作者:--    发布时间:2019-11-20

在本教程中,您将学习如何使用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子句按分组列中的值(如c1c2c3)对行进行分组。group by子句只能包含聚合或分组的列。

如果要指定应该一次计算的多个分组级别,请使用以下rollup语法:

select
    column_list
from
    t
group by
    rollup(c1,c2,c3);

oracle group by示例

我们将在示例数据库中使用以下ordersorder_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_idstatus和(customer_idstatus)对其进行分组:

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子句将行记录分组。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册