您的位置:首页 > 健康 > 美食 > Mysql分组如何使用

Mysql分组如何使用

2025/2/24 11:27:57 来源:https://blog.csdn.net/yaomingyang/article/details/139637145  浏览:    关键词:Mysql分组如何使用

开源项目SDK:https://github.com/mingyang66/spring-parent
个人文档:https://mingyang66.github.io/raccoon-docs/#/

一、Mysql窗口函数over(partition by …)分组

Mysql8.0及更高版本支持窗口函数,这使得在查询结果集上执行计算变得更为简单,尤其在进行分组统计是。

以下是一个fund表,按照日期进行分组,并统计每个分组总的销售金额:

selecth.date,h.balance,sum(h.balance) over(partition by h.date) as balance,count(h.balance) over(partition by h.date) as amount
fromfund h
whereh.market_type = 'l'
order byh.date desc
  • sum(…)是一个聚合函数,用于计算总的销售金额;
  • count(…)是一个聚合函数,用于计算对应分组数量;
  • over(partition by …)指定了窗口函数的分区方式,上述示例按照date进行分区,这意味着每天的销售金额都会被单独计算,每天的销售数量将会被单独计算;

执行上述查询后将会得到一个结果集,其中每一行都包含原始销售额,以及当天对应的总的销售额、销售数量。窗口函数不会减少结果集中的行数,而是会为每一行添加额外的计算列。

row_number() 是mysql8.0新增的函数,为查询结果中的每一行分配唯一的数字,遇到分组或排序的值相同时不会跳过序号,也不会分配相同的数字:

select row_number() over(partition by h.date order by h.date desc) as num from fund

上述指定了按照date分组,会在每个分组中按照date降序排列序号从1开始标记

select row_number() over(h.date order by h.date desc) as num from fund

上述sql未指定partition by分组,则会将整个sql按照条件date进行降序排列,并标记数字序号。

rank()是mysql8.0新增的函数,为查询结果中的每一行分配一个排名,如果遇到相同的排序字段值则会分配相同的排名,下一个对应的值会跳过上一个值对应的数量排名值。

select rank() over(order by h.init_date desc) as rk from fund
二、Mysql group by语句分组

group by语句根据一个或多个列对结果集进行分组,在分组列我们可以使用count、sum、avg等函数。

语法如下:

SELECT customer_id, SUM(order_amount) AS total_amount
FROM orders
GROUP BY customer;

group by语句会减少结果的行数

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com