盘点多种SQL排序方案!
盘点多种SQL排序方案!
排序简介
在工作中,很多业务场景会用到排序,例如:TopN问题,连续性问题等,起着至关重要的作用。本次以人员销量为背景,谈谈一些排序方式。本文利用窗口函数、临时变量和表连接实现3中不同的排序方式!(注:本文说的排序也称编号,1、窗口函数需MySQL8.0以上,2、临时变量和3、表连接适用于任何版本)
场景一:求某app连续登录3天的用户信息?
场景二:求每个部门薪资前三的员工信息?
这里通过样例数据来实操一下排序:
1、窗口函数
方式1:重复连续
SELECT name, sale, dense_rank()over(order by sale desc) as rkFROM `ranking`
方式2:重复不连续
SELECT name, sale, rank()over(order by sale desc) as rkFROM `ranking`
方式3:连续不重复
SELECT name, sale, row_number()over(order by sale desc) as rkFROM `ranking`
注:
2、临时变量
方式1:重复连续
select name, sale, rkfrom(SELECT name, @rk:=if(@sale=sale,@rk,@rk+1) as rk, @sale:= sale as saleFROM `ranking`,(select @rk:=0,@sale:=null)aorder by sale desc)b
方式2:重复不连续
select name, sale, rkfrom(SELECT name, @row:=@row+1, @rk:=if(@sale=sale,@rk,@row) as rk, @sale:= sale as saleFROM `ranking`,(select @rk:=0,@row:=0,@sale:=null)aorder by sale desc)b
方式3:连续不重复
SELECT name, sale, @rk := @rk + 1 as rkFROM `ranking`,(select @rk:=0)aorder by sale des
注:利用临时变量计数达到编号的目的
3、拓展:表连接
方式1:重复连续
SELECT p1.name, p1.sale, (select count(distinct p2.sale) from `ranking` p2 where p2.sale > p1.sale)+1 as rkFROM `ranking` p1order by rk
方式2:重复不连续
SELECT p1.name, p1.sale, (select count(p2.sale) from `ranking` p2 where p2.sale > p1.sale)+1 as rkFROM `ranking` p1order by rk
注:自然连接是通过条件过滤和count计数来达到目的
最后
不管是在日常工作中还是面试中,针对SQL排序的知识点特别重要,我们一定要加以掌握!
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需99元,即可下载本站文章涉及的文件和软件。
共有 0 条评论