详解MySQL 数据分组

数据库 itxz 5年前 (2020-12-22) 419次浏览 已收录 0个评论

分组是在SELECT语句中的GROUP BY 子句中建立的。

例:

SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id;


GROUP BY

如果想要列出至少有两个订单的所有数据,这样的数据就必须基于完整的分组而不是个别的行进行过滤。

可以使用HAVING

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


HAVING和WHERE的差别,WHERE在数据分组前进行过滤,HAVING在分组后进行过滤。当然,两个也可以在同一条语句中出现。

列出具有2个(含)以上、价格为10(含)以上的产品的供应商

SELECT vend_id, COUNT(*) AS num_prods FROM products WHERE prod_price >= 10 GROUP BY vend_id HAVING COUNT(*) >= 2;


列出具有两个至上的产品的供应商

SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id HAVING COUNT(*) >= 2;

ORDER BY GROUP BY
排序产生的输出 分组行。但输出可能不是分组的顺序
任意列都可以使用(非选择的列也可以) 只可能使用选择列或表达式列,而且必须使用每个选择列表达式
不一定需要 如果与聚集函数一起使用列(表达式),则必须使用
SELECT order_num, SUM(quantity*item) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price) >= 50;


如果按总计订单价格排序输出

SELECT order_num, SUM(quantity * item_price) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity * item_price) >= 50 ORDER BY ordertotal;


SELECT子句的顺序

子句 说明 是否必须使用
SELECT 要返回的列或表达式
FROM 从中检索数据的表 仅在从表选择数据时使用
GROUP BY 分组说明 仅在按组计算聚集时使用
WHERE 行级过滤
HAVING 组级过滤
ORDER BY 输出排序顺序
LIMIT 要检索的行数

IT学者 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解MySQL 数据分组
喜欢 (0)

您必须 登录 才能发表评论!