sqlserver mysql Cube_SQL Server CUBE

在本教程中,将学习如何使用SQL Server CUBE生成多个分组集。

SQL Server CUBE简介

分组集在单个查询中指定数据分组。 例如,以下查询定义表示为(品牌)的单个分组集:

SELECT

brand,

SUM(sales)

FROM

sales.sales_summary

GROUP BY

brand;

如果您没有学习过GROUPING SETS的使用,可使用以下查询创建sales.sales_summary表:

SELECT

b.brand_name AS brand,

c.category_name AS category,

p.model_year,

round(

SUM (

quantity * i.list_price * (1 - discount)

),

0

) sales INTO sales.sales_summary

FROM

sales.order_items i

INNER JOIN production.products p ON p.product_id = i.product_id

INNER JOIN production.brands b ON b.brand_id = p.brand_id

INNER JOIN production.categories c ON c.category_id = p.category_id

GROUP BY

b.brand_name,

c.category_name,

p.model_year

ORDER BY

b.brand_name,

c.category_name,

p.model_year;

即使以下查询不使用GROUP BY子句,它也会生成一个空的分组集,表示为()。

SELECT

SUM(sales)

FROM

sales.sales_summary

GROUP BY

brand;

CUBE是GROUP BY子句的子句,用于生成多个分组集。 以下是CUBE的一般语法:

SELECT

d1,

d2,

d3,

aggregate_function (c4)

FROM

table_name

GROUP BY

CUBE (d1, d2, d3);

在此语法中,CUBE根据在CUBE子句中指定的维度列:d1,d2和d3生成所有可能的分组集。

上面的查询返回与以下查询相同的结果集,该查询使用GROUPING SETS:

SELECT

d1,

d2,

d3,

aggregate_function (c4)

FROM

table_name

GROUP BY

GROUPING SETS (

(d1,d2,d3),

(d1,d2),

(d1,d3),

(d2,d3),

(d1),

(d2),

(d3),

()

);

如果在多维数据集中指定了N维列,则将具有2N个分组集。

通过部分使用CUBE可以减少分组集的数量,如以下查询所示:

SELECT

d1,

d2,

d3,

aggregate_function (c4)

FROM

table_name

GROUP BY

d1,

CUBE (d2, d3);

在这种情况下,查询生成四个分组集,因为在CUBE中只指定了两个维列。

SQL Server CUBE示例

以下语句使用CUBE生成四个分组集:

(brand, category)

(brand)

(category)

()

参考以下查询语句:

SELECT

brand,

category,

SUM (sales) sales

FROM

sales.sales_summary

GROUP BY

CUBE(brand, category);

执行上面查询语句,得到以下结果:

db9389474da2c18d8099cba66e8ecc7a.png

在此示例中,在CUBE子句中指定了两个维列,因此,我们总共有四个分组集。

以下示例说明如何执行部分CUBE以减少查询生成的分组集的数量:

SELECT

brand,

category,

SUM (sales) sales

FROM

sales.sales_summary

GROUP BY

brand,

CUBE(category);

执行上面查询语句,得到以下结果:

9b8460941ec40e01eebbf59ddbe9d47f.png

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值