Oracle选用GROUPING SETS排序自定方式归纳

2021-03-17 13:00 jianzhan

Oracle选用GROUPING SETS排序自定方式归纳


如果你与COUNT和SUM这种累计涵数一起应用GROUPBY句子时,你一般无法得到多级别数量。GROUPBY中每一个唯一的列组成转化成一个数量,但这种数量不容易 累加 到高些一级的数量中。

要完成这一点,你可以以用GROUPBYROLLUP或GROUPBYCUBE取代GROUPBY,但是他们会转化成全部将会的数量,但你将会不用所有数量。对GROUPBYCUBE来讲,可能转化成2^n组数量,这儿的n是GROUPBY中列的数量。

查询下边的查寻,它应用了SH样版方式:

SELECTprod_id,cust_id,channel_id,SUM(quantity_sold)FROMsalesWHEREcust_id 3GROUPBYCUBE(prod_id,cust_id,channel_id)

这将转化成8组数量:

全部行的总数

每一个安全通道,包含全部商品和消费者。

每一个消费者,包含全部商品和安全通道。

每项商品,包含全部消费者和安全通道。

每一个安全通道/消费者组成,包含全部商品。

每一个安全通道/商品组成,包含全部消费者。

每一个商品/消费者组成,包含全部安全通道。

每一个商品、消费者和安全通道组成。

将会的组成十分多。GROUPBYCUBE中每提升一列,转化成的数量便会翻一番。

能够用GROUPBYGROUPINGSETS来替代GROUPBYCUBE。你可以以运用来特定你很感兴趣的数量组成。由于它无须测算它不用结合(都不会造成过多結果),因此对SQL模块来讲更加高效率。

其文件格式为:

GROUPBYGROUPINGSETS((list),(list)...)

这儿(list)是圆括弧中的一个列编码序列,这一组成转化成一个数量。要提升一个总数,务必提升一个(NUlL)排序集。

比如,假如要是转化成每项商品(包含全部消费者和安全通道)和每一个消费者/安全通道组成(包含全部商品)的数量,能够键入:

SELECTprod_id,cust_id,channel_id,SUM(quantity_sold)FROMsalesWHEREcust_id 3GROUPBYGROUPINGSETS((prod_id),(cust_id,channel_id));

这类方式将这一数据信息集转化成的数量总数从180个降低到3七个,并协助你主要回应你期待解释的难题。

共享到:
文中"Oracle选用GROUPING SETS排序自定方式归纳"由远航网站站长搜集梳理而成,仅作大伙儿学习培训与参照应用。大量网站建设实例教程尽在远航网站站长站。