分组在SELECT语句的GROUP BY子句中建立
SELECT vend_id, COUNT(*) AS num_prods
FROM products
GROUP BY vend_id;
GROUP BY子句指示MySQL分组数据,然后对每个组而不是整个结果集进行聚聚
具体使用GROUP BY子句前,需知道一些重要规定
- GROUP BY子句可包含任意数目的列
- 如在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上汇总
- GROUP BY子句中列出的列必须是检索列或有效的表达式[不可为聚聚函数]
- GROUP BY必须在WHERE子后,ORDER BY之前
过滤分组
HAVING
HAVING支持所有WHERE操作符
SELECT cust_id, COUNT(*) AS orders
FROM orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;
WHERE在数据分组前过滤
HAVING在分组后过滤
SELECT vend_id, COUNT(*) AS num_prods
FROM products
WHERE prod_price >= 10
GROUP BY vend_id
HAVING COUNT(*) >= 2;
分组和排序
SELECT order_num, SUM(quantity*item_price) AS ordertotal
FROM orderitems
GROUP BY order_num
HAVING SUM(quantity*item_price)>=50;
ORDER BY ordertotal;