mysql group by 分组统计
在MySQL中,GROUP BY语句通常与聚合函数(如COUNT(), SUM(), AVG(), MAX(), MIN()等)一起使用,以便对一组记录进行分组统计。
示例1:计算每个类别的产品数量 假设有一个名为products的表,其中包含category_id和product_name字段,你可以使用以下SQL语句来计算每个类别的产品数量:
SELECT category_id, COUNT(*) AS product_count
FROM products
GROUP BY category_id;
示例2:计算每个类别的平均价格 如果你有一个包含category_id和price字段的products表,你可以使用以下SQL语句来计算每个类别的平均价格:
SELECT category_id, AVG(price) AS average_price
FROM products
GROUP BY category_id;
示例3:分组统计,并包含未分组的行 如果你想要包括那些在分组中没有记录的类别,可以使用LEFT JOIN与一个包含所有类别的临时表或子查询:
SELECT c.category_id, COUNT(p.product_id) AS product_count
FROM (SELECT DISTINCT category_id FROM products) AS c
LEFT JOIN products p ON c.category_id = p.category_id
GROUP BY c.category_id;
示例4:使用HAVING子句过滤分组结果 你还可以使用HAVING子句来过滤分组后的结果,比如只显示产品数量超过某个阈值的类别:
SELECT category_id, COUNT(*) AS product_count
FROM products
GROUP BY category_id
HAVING COUNT(*) > 10;
示例5:结合多个聚合函数 你可以在同一个查询中结合使用多个聚合函数:
SELECT category_id,
COUNT(*) AS product_count,
AVG(price) AS average_price,
MAX(price) AS max_price,
MIN(price) AS min_price
FROM products
GROUP BY category_id;
--- DEMO --- 按会员号来统计 商品类型的数量
##
select mem_no,`owner_type` from goods
where and `mem_no` in (
'123',
'456'
) group by `mem_no`,`owner_type`
返回结果: 123 个人 456 个人 123 托管
##嵌套查询结果
select `owner_type`,count(*) from (
select `owner_type`,`mem_no` from goods
where `mem_no` in (
'123',
'456'
) group by `mem_no` ,owner_type
) tt group by `owner_type`
返回结果: 个人 2 托管 1