《SQL基础教程》+ 《SQL进阶教程》 学习笔记 (12)

上面结果中,第 1、2、3、7、10、12 行称为超级分组记录(super group row)。

(2)用 ROLLUP + GROUPING SELECT CASE WHEN GROUPING(product_type) = 1 THEN '商品种类 合计' ELSE product_type END AS product_type, CASE WHEN GROUPING(regist_date) = 1 THEN '登记日期 合计' ELSE CAST(regist_date AS VARCHAR(16)) END AS regist_date, SUM(sale_price) AS sum_price FROM Product GROUP BY ROLLUP(product_type, regist_date);

上面 (1)只用 ROLLUP 的例子,超级分组记录都存在 null 数据的情况,为了避免阅读的混淆,SQL 提供了一个用来判断超级分组记录的 NULL 的特定函数—— GROUPING 函数。该函数在其参数列的值为超级分组记录所产生的 NULL 时返回 1 ,其他情况返回 0


结果:

product_type regist_date sum_price
商品种类 合计   登记日期 合计   16780  
厨房用具   登记日期 合计   11180  
厨房用具   2008-04-28   880  
厨房用具   2009-01-15   6800  
厨房用具   2009-09-20   3500  
办公用品   登记日期 合计   600  
办公用品   2009-09-11   500  
办公用品   2009-11-11   100  
衣服   登记日期 合计   5000  
衣服   2009-09-20   1000  
衣服     4000  
2、CUBE——用数据来搭积木

上面 (2)用 ROLLUP + GROUPING 的例子,直接把 ROLLUP 改写成 CUBE 就行:

SELECT CASE WHEN GROUPING(product_type) = 1 THEN '商品种类 合计' ELSE product_type END AS product_type, CASE WHEN GROUPING(regist_date) = 1 THEN '登记日期 合计' ELSE CAST(regist_date AS VARCHAR(16)) END AS regist_date, SUM(sale_price) AS sum_price FROM Product GROUP BY CUBE(product_type, regist_date);

GROUP BY CUBE (product_type, regist_date); 的结果等于

① GROUP BY ()

② GROUP BY (product_type)

③ GROUP BY (regist_date) ←新添的组合

④ GROUP BY (product_type, regist_date)

三者的 UNION。

CUBE 生成的 GROUP BY 组合,是 2 的 n 次方(n 是聚合键的个数)。

这就是 CUBE 如此起名的由来。


结果(第3-8行是比之前多出来的):

product_type regist_date sum_price
商品种类 合计   登记日期 合计   16780  
商品种类 合计   2008-04-28   880  
商品种类 合计   2009-01-15   6800  
商品种类 合计   2009-09-11   500  
商品种类 合计   2009-09-20   4500  
商品种类 合计   2009-11-11   100  
商品种类 合计     4000  
厨房用具   登记日期 合计   11180  
厨房用具   2008-04-28   880  
厨房用具   2009-01-15   6800  
厨房用具   2009-09-20   3500  
办公用品   登记日期 合计   600  
办公用品   2009-09-11   500  
办公用品   2009-11-11   100  
衣服   登记日期 合计   5000  
衣服   2009-09-20   1000  
衣服     4000  
3、GROUPING SETS——取得期望的积木

因为 GROUPING SETS 会获得不固定结果,因此与 ROLLUP 或者CUBE 比起来,使用GROUPING SETS 的机会很少。

这里姑且略过。

第 9 章 通过应用程序连接数据库 1、驱动

驱动就是应用数据库这两个世界之间的桥梁。

2、驱动标准

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygdwg.html