mysql group by 分组统计

mysql group by 分组统计

在MySQL中,GROUP BY语句通常与聚合函数(如COUNT(), SUM(), AVG(), MAX(), MIN()等)一起使用,以便对一组记录进行分组统计。

示例1:计算每个类别的产品数量 假设有一个名为products的表,其中包含category_id和product_name字段,你可以使用以下SQL语句来计算每个类别的产品数量:

代码语言:javascript代码运行次数:0运行复制
SELECT category_id, COUNT(*) AS product_count
FROM products
GROUP BY category_id;

示例2:计算每个类别的平均价格 如果你有一个包含category_id和price字段的products表,你可以使用以下SQL语句来计算每个类别的平均价格:

代码语言:javascript代码运行次数:0运行复制
SELECT category_id, AVG(price) AS average_price
FROM products
GROUP BY category_id;

示例3:分组统计,并包含未分组的行 如果你想要包括那些在分组中没有记录的类别,可以使用LEFT JOIN与一个包含所有类别的临时表或子查询:

代码语言:javascript代码运行次数:0运行复制
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子句来过滤分组后的结果,比如只显示产品数量超过某个阈值的类别:

代码语言:javascript代码运行次数:0运行复制
SELECT category_id, COUNT(*) AS product_count
FROM products
GROUP BY category_id
HAVING COUNT(*) > 10;

示例5:结合多个聚合函数 你可以在同一个查询中结合使用多个聚合函数:

代码语言:javascript代码运行次数:0运行复制
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 --- 按会员号来统计 商品类型的数量

代码语言:javascript代码运行次数:0运行复制
##
  select mem_no,`owner_type` from goods 
  where and `mem_no` in (
  '123',
  '456'
    ) group by `mem_no`,`owner_type`  

返回结果: 123 个人 456 个人 123 托管

##嵌套查询结果

代码语言:javascript代码运行次数:0运行复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-03-27,如有侵权请联系 cloudcommunity@tencent 删除select函数统计mysqlproduct