上一篇结尾其实还有一些问题,因为在使用with rollup进行汇总后,在部门属性上是不知道给什么值的,也就是空值,如果有的人还没有确切的部门(为null),这时候再使用
SELECT IFNULL(部门,"总计") AS 部门 ,COUNT(部门) AS 部门,AVG(年龄) AS 平均年龄 FROM hero GROUP BY 部门 WITH ROLLUP
虽然解决了汇总数据不为空的问题,但那些本身没有部门的人现在也变成了"总计".
如图
下面一篇文章给出了解决办法:
https://www.cnblogs.com/Mr-Cxy/p/5923375.html
解决思路大致是这样的:
利用select嵌套,看作取出两个表,第一次取出数据的时候,把没有部门所属的数据赋值为编外部门,第二次的子表在第一个表的基础上重新把数据取出来一次把with rollup汇总出来的数据再记为总计.
SELECT IFNULL(部门,"总计") AS 部门,COUNT(部门) AS 部门人数,AVG(年龄) AS 平均年龄 FROM (
SELECT 年龄,IFNULL(部门,"编外") AS 部门,NAME FROM hero
)AS test GROUP BY 部门 WITH ROLLUP
另外关于select嵌套问题,子表必须要取别名,以后有机会再说.