当需要对数据库数据进行分类统计的时候,往往会用上group by进行分组。而在group by后面还可以加入with cube和with rollup等关键字对数据进行汇总。那什么时候用with cube?什么时候用with rollup呢?
一、两者的区别
CUBE 生成的结果集显示了所选列中值的所有组合(group by 后面的列组合)的聚合。
ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
二、两者的用法(实例说明)
CUBE:除了返回GROUP BY子句指定的列外,还返回按组统计的行。返回的结果先按分组的第一个条件排序显示,再按第二个条件列排序显示,以此类推。统计行包括了GROUP BY 子句指定的列的各种组合的数据统计。
ROLLUP, 它能用一个问询提供双层分析。使询问产生另一行结果,该行显示了所有年份的总价值:
mysql> SELECT year, SUM(profit) FROM sales GROUP BY year WITH ROLLUP;
+------+-------------+
| year | SUM(profit) |
+------+-------------+
| 2000 | 4525 |
| 2001 | 3010 |
| NULL | 7535 |
+------+-------------+
总计高聚集行被年份列中的NULL值标出。