数据库-分组数据

分组可以将数据分为多个组,然后进行分别的计算。

创建分组

利用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子句必须存在于WHEREORDER BY
    • GROUP BY子句后必须为现存列或表达式,不能是临时起的别名,不然会显示错误
    • SELECT语句中存在的每一列除聚集函数外的每一列都要存在于GROUP BY子句后
    • 在建立分组时,我们就会将所有指定的列一起计算,并不能再从哪个列单独取出某个值了

过滤分组

原来的查询语句中我们使用WHERE来过滤条件,但是在GROUP BYWHERE就起不到作用了。 这里我们引用一个新的关键字HAVING,利用HAVING关键字来过滤分组的条件。 例如:

SELECT cust_id, COUNT(*) AS orders
FROM Orders
GROUP BY cust_id
HAVING COUNT(*) >=2;

它将按cust_id分组,然后选择其中计数>=2的输出。

分组和排序

ORDER BY

  1. 对产生的列进行排序
  2. 即使SELECT语句后没有的列也能进行查找
  3. 不一定需要

GROUP BY

  1. 对行进行分组,但输出不一定是那个顺序
  2. 只能使用已经选择的列,而且必须使用每个列的表达式
  3. 如果和聚集函数一起使用列,则必须使用

Posts in this Series