按年龄分组计算出每个年龄的人数:
分组允许将数据分为多个逻辑组,以便能对每个组进行聚集计算。
GROUP BY子句中可以包含任意数目的列:
GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(不能是聚集函数),如果SELECT中有表达式,则在GROUP BY子句中必须使用相同表达式,但我测试时不需要:
GROUP BY中不能使用别名,但我测试时可以:
除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出,但我测试时不用:
此时childno列值为该分组中的某一个列值。
分组时,所有的NULL值为一组。
GROUP BY子句必须出现在WHERE子句后,ORDER BY子句前。
WITH ROLLUP可放在GROUP BY子句的最后一个列名后,效果为按GROUP BY的顺序多次生成聚集行:
HAVING可过滤分组,它也支持所有的WHERE操作符,目前为止所有的WHERE都能用HAVING代替:
过滤分组:
WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
WHERE在分组前过滤结果:
用GROUP BY分组的数据经常是按分组列顺序输出的,但这并不是SQL规范所要求的。
ORDER BY语句可位于GROUP BY的HAVING之后给分组排序。