今天发觉 网上关 with rollup的示例是错的,特地来纠正一下
select * from employee; ±-----±-----±-------±-----±-----±------------+ | num | d_id | name | age | sex | homeaddr | ±-----±-----±-------±-----±-----±------------+ | 1 | 1001 | 张三 | 26 | 男 | beijinghdq | | 2 | 1002 | 李四 | 24 | 女 | beijingcpq | | 3 | 1003 | 王五 | 25 | 男 | changshaylq | | 4 | 1004 | Aric | 15 | 男 | England | ±-----±-----±-------±-----±-----±------------+
select sex,count(age) from employee group by sex with rollup; ±-----±-----------+ | sex | count(age) | ±-----±-----------+ | 女 | 1 | | 男 | 3 | | NULL | 4 | ±-----±-----------+
select sex,arg(age) from employee group by sex with rollup; ±-----±-----------+ | sex | arg(age) | ±-----±-----------+ | 女 | 24.0000 | | 男 | 22.0000 | | NULL | 22.5000 | ±-----±-----------+
上面这个null 这一行对应的 22.5000 其实是没分组之前应用函数 对 age 这一列做运算,即:(26 + 24 + 25 + 15 ) / 4 = 22.5000
select sex, max(age) from employee group by sex with rollup; ±-----±-----------+ | sex | max(age) | ±-----±-----------+ | 女 | 24 | | 男 | 26 | | NULL | 26 | ±-----±-----------+
所以 with rollup 最后出现的 null 这一行是针对每分组前 ,需要显示的某列运用分组后的集合运算 得出的值
以下参考链接这个用法是错的,当时用了之后一脸蒙蔽,搞清楚怎么回事之后就写出来它的真正用法了, 参考:https://www.cnblogs.com/snsdzjlz320/p/5738226.html