分组
创建分组
GROUP BY
SELECT id, COUNT(*) AS num FROM table GROUP BY id
- 关于
GROUP BY
- 支持任意数目的列。
- GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。
- GROUP BY子句中列出的每个列都必须是检索列或有效的表达式。
- 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。
- 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。
附带
WITH ROLLUP
会计算分组汇总的结果,作为最后一行。
SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id WITH ROLLUP
过滤分组
WHERE 过滤的是行,而不是分组,WHERE没有分组的概念。
过滤分组使用HAVING
,实际上WHERE
可以用HAVING
代替。
HAVING和WHERE的差别
WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
分组和排序
对比ORDER BY
和GROUP BY
一般在使用 GROUP BY
子句时,应该也给出 ORDER BY
子句。这是保证数据正确排序的唯一方法。千万不要仅依赖 GROUP BY
排序数据。