group by rollup
rollup与group by组合使用可对分组结果进行进一步的汇总(相当于对分组结果加一行小计)。
mysql :
SELECT
CASE WHEN GROUPING(姓名)=1 THEN '总计' ELSE 姓名 END AS 姓名,
SUM(数值1) 统计数值1,
SUM(数值2) 统计数值2
FROM 表名
GROUP BY 姓名 WITH ROLLUP
oracle :
SELECT
CASE WHEN GROUPING(姓名)=1 THEN '总计' ELSE 姓名 END AS 姓名,
SUM(数值1) 统计数值1,
SUM(数值2) 统计数值2
FROM 表名
GROUP BY ROLLUP(姓名)
以上是只有一个字段分组的情况,下面是多个字段分组:
mysql :
SELECT
CASE WHEN GROUPING(姓名)=1 THEN '总计' ELSE 姓名 END AS 姓名,
CASE WHEN GROUPING(区域)=1 THEN '总计' ELSE 区域 END AS 区域,
SUM(数值1) 统计数值1,
SUM(数值2) 统计数值2
FROM 表名
GROUP BY 姓名,区域 WITH ROLLUP
HAVING ((GROUPING(姓名)=1 and GROUPING(区域)=1)
OR (GROUPING(姓名)=0 and GROUPING(区域)=0))
oracle :
SELECT
CASE WHEN GROUPING(姓名)=1 THEN '总计' ELSE 姓名 END AS 姓名,
CASE WHEN GROUPING(区域)=1 THEN '总计' ELSE 区域 END AS 区域,
SUM(数值1) 统计数值1,
SUM(数值2) 统计数值2
FROM 表名
GROUP BY ROLLUP(姓名,区域)
HAVING ((GROUPING(姓名)=1 and GROUPING(区域)=1)
OR (GROUPING(姓名)=0 and GROUPING(区域)=0))