有一位同学通过askdba来询问with rollup的用法
(2012-02-01 15:08:22):
mysql中有这种用法select … from table_name group by a with rollup
“with rollup”是什么意思呢?
GROUP BY Modifiers 官方手册里面对这个rollup有一个专门的页面介绍 地址在这里,说得非常详细,我这里做一个简单的例子重现
建一个简单的表并插入几条简单的数据
CREATE TABLE `t` (
`id` int(11) DEFAULT NULL,
`id2` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
insert into t valeu(11,11),(12,12),(13,13);
先来做一个查询
root@test 03:44:32>select id,sum(id2),avg(id2) from t group by id with rollup;
+——+———-+———-+
| id | sum(id2) | avg(id2) |
+——+———-+———-+
| 11 | 11 | 11.0000 |
| 12 | 12 | 12.0000 |
| 13 | 13 | 13.0000 |
| NULL | 36 | 12.0000 |
+——+———-+———-+
4 rows in set (0.00 sec)
我们可以看到,对于group by的列,with rollup将不会做任何的操作,而是返回一个NULL,而没有group by的列,则根据前面的avg函数和sum函数做了处理。
再来看另外一个语句,只对一个列做avg
root@test 03:44:36>select id,avg(id2) from t group by id with rollup;
+——+———-+
| id | avg(id2) |
+——+———-+
| 11 | 11.0000 |
| 12 | 12.0000 |
| 13 | 13.0000 |
| NULL | 12.0000 |
+——+———-+
4 rows in set (0.00 sec)
以前从没留意到有这种用法,这次长见识了。
原文转自:http://ourmysql.com/archives/1144