数据库-分组数据
分组可以将数据分为多个组,然后进行分别的计算。
创建分组
利用GROUP BY
子句来创建分组。
GROUP BY
子句将列中的值排序并分组。
例如
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id;
- 用
GROUP BY
子句,我们需要知道几个重点:GROUP BY
子句能任意嵌套,做到更细致的分组GROUP BY
子句如果分组中有NULL
则会把它们分成一组GROUP BY
子句必须存在于WHERE
后ORDER BY
前GROUP BY
子句后必须为现存列或表达式,不能是临时起的别名,不然会显示错误- 在
SELECT
语句中存在的每一列除聚集函数外的每一列都要存在于GROUP BY
子句后 - 在建立分组时,我们就会将所有指定的列一起计算,并不能再从哪个列单独取出某个值了
过滤分组
原来的查询语句中我们使用WHERE
来过滤条件,但是在GROUP BY
中WHERE
就起不到作用了。
这里我们引用一个新的关键字HAVING
,利用HAVING
关键字来过滤分组的条件。
例如:
SELECT cust_id, COUNT(*) AS orders
FROM Orders
GROUP BY cust_id
HAVING COUNT(*) >=2;
它将按cust_id分组,然后选择其中计数>=2的输出。
分组和排序
ORDER BY
- 对产生的列进行排序
- 即使
SELECT
语句后没有的列也能进行查找 - 不一定需要
GROUP BY
- 对行进行分组,但输出不一定是那个顺序
- 只能使用已经选择的列,而且必须使用每个列的表达式
- 如果和聚集函数一起使用列,则必须使用