Skip to content
On this page

分组

创建分组

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在数据分组后进行过滤。

同时使用时,WHERE可能会影响HAVING的结果。

分组和排序

对比ORDER BYGROUP BY

一般在使用 GROUP BY 子句时,应该也给出 ORDER BY 子句。这是保证数据正确排序的唯一方法。千万不要仅依赖 GROUP BY 排序数据。

MIT Licensed | Copyright © 2021 - 2022