盘点多种SQL排序方案!

  • A+
所属分类:SQL技巧

盘点多种SQL排序方案!

排序简介

在工作中,很多业务场景会用到排序,例如:TopN问题,连续性问题等,起着至关重要的作用。本次以人员销量为背景,谈谈一些排序方式。本文利用窗口函数、临时变量和表连接实现3中不同的排序方式!(注:本文说的排序也称编号,1、窗口函数需MySQL8.0以上,2、临时变量和3、表连接适用于任何版本

场景一:求某app连续登录3天的用户信息?

场景二:求每个部门薪资前三的员工信息?

这里通过样例数据来实操一下排序:

 

盘点多种SQL排序方案!

 

1、窗口函数

方式1:重复连续

SELECT name, sale, dense_rank()over(order by sale desc) as rkFROM `ranking`

盘点多种SQL排序方案!

 

方式2:重复不连续

SELECT name, sale, rank()over(order by sale desc) as rkFROM `ranking`

盘点多种SQL排序方案!

 

方式3:连续不重复

SELECT name, sale, row_number()over(order by sale desc) as rkFROM `ranking`

盘点多种SQL排序方案!

 

注:

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

盘点多种SQL排序方案!

 

方式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

盘点多种SQL排序方案!

 

方式3:连续不重复

SELECT name, sale, @rk := @rk + 1 as rkFROM `ranking`,(select @rk:=0)aorder by sale des

盘点多种SQL排序方案!

 

注:利用临时变量计数达到编号的目的

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

盘点多种SQL排序方案!

 

方式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

盘点多种SQL排序方案!

 

注:自然连接是通过条件过滤和count计数来达到目的

最后

不管是在日常工作中还是面试中,针对SQL排序的知识点特别重要,我们一定要加以掌握!

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

盘点多种SQL排序方案!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

  • 我的微信
  • weinxin
  • 我的知识星球
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: