mysql中的分组统计函数及其用法实例

本文详细介绍如何使用SQL的groupby进行数据分组,包括如何结合group_concat显示分组字段,以及在分组查询中正确使用having添加条件。同时,文章还解释了在条件分组与排序时,orderby语句的正确位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.使用group by对数据进行分组:select 字段名。。。 from tablename group by 字段名。。。;可以把分组、排序、统计等等都结合在一起使用,实际应用中也多是这样的:

2.使用group_concat()实现显示每个分组中的字段:

3.如果要在分组查询中加入条件,则必须使用having而不是where:

 

4.如果使用条件分组的同时还要排序,则order by必须位于having后边:

 

### 结合使用窗口函数和 `GROUP BY` 的方法 在 MySQL 中,自 8.0 版本起支持开窗函数 (也称为 OLAP 函数)[^1]。这些函数允许在同一查询中既应用分组操作又计算累积或其他类型的滚动统计数据。 #### 使用场景说明 假设有一个订单表 (`orders`),其中包含产品 ID (`product_id`)、销售日期 (`sale_date`) 及单价 (`price`) 字段。现在希望按月汇总销售额的同时获取每个月累计到当前月份的总销量额。 #### SQL 查询实例 下面是一个具体的例子来展示如何结合 `GROUP BY` 和窗口函数: ```sql SELECT DATE_FORMAT(sale_date, '%Y-%m') AS month, SUM(price) OVER (PARTITION BY YEAR(sale_date), MONTH(sale_date)) as monthly_sales, SUM(SUM(price)) OVER (ORDER BY MIN(DATE_FORMAT(sale_date,'%Y-%m'))) as cumulative_sales FROM orders GROUP BY year(sale_date), month(sale_date); ``` 此查询语句做了如下几件事: - 首先通过 `DATE_FORMAT()` 提取年份和月份作为新的列 `month`. - 接着利用 `SUM() OVER ()` 来创建两个新列:一个是基于每年每月分区得到的当月销售额(`monthly_sales`);另一个则是按照时间顺序累加起来直到当前记录为止的所有销售额(`cumulative_sales`). 注意这里内部还有一个嵌套的 `SUM()` 聚合函数用于确保即使存在多条相同月份的数据也能被正确处理. - 最后以年度和月份为单位进行了分组. 需要注意的是,在上述SQL片段里,聚合函数会优先于窗口函数执行[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值