MySQL group by with rollup的用法

发表于:2013-07-24来源:OurMySLQ作者:OurMySLQ点击数: 标签:MySQL
有一位同学通过askdba来询问with rollup的用法 (2012-02-01 15:08:22): mysql中有这种用法select … from table_name group by a with rollup

  有一位同学通过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