[Mysql-4续]. 关于with rollup的NULL值问题

上一篇结尾其实还有一些问题,因为在使用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嵌套问题,子表必须要取别名,以后有机会再说.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 查询基础 算术运算符 (+)(-)(*)(/) 值得注意的是:/ 在oracle中就相当于显示中的除法 5/2 =...
    Autism_37a1阅读 490评论 0 0
  • 这一篇最主要是记录下命令,方便以后查找 使用Mysql 创建数据库 create database mysql_t...
    Treehl阅读 602评论 0 0
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,664评论 0 4
  • group by 用来在原始数据上创建聚合来将数据转化为有用的信息。 基本的group by 列出个个部门的名称...
    猫猫_tomluo阅读 1,251评论 0 6
  • 幕课oracle学习笔记 --!!!scott用户 --一.分组查询 --1.常用的分组函数:AVG(平均数),S...
    xiaoxiao苏阅读 1,289评论 0 5