技术分享-SQL-(1)四大排序/分析函数

一般而言,在数据库里面,用来做排序的函数主要有四个:

row_number、renk、dense_rank、ntile

此处以sqlserser操作方法作解析,此处我把该表放在tmp库下的goosinfo表里,使用数据可移步:数据库练习数据

 

1、row_number

该函数一般形如:row_number() over()

(1)查询2018年6月的销额排行


   

SELECT ROW_NUMBER() OVER (ORDER BY value desc) row,* FROM  tmp.dbo.goodsinfo
    WHERE the_month=201806

技术分享-SQL-(1)四大排序/分析函数_第1张图片

 

(2)查询全年各个商品各个月的销额排行

SELECT ROW_NUMBER()OVER(PARTITION BY goodsid ORDER BY value desc) row,* FROM  tmp.dbo.goodsinfo


   

技术分享-SQL-(1)四大排序/分析函数_第2张图片

 

(3)仔细对比两次的查询结果,第二次相比第一次多了一个partition by,也去掉了月份限制(方便查询结果的展示)。

第一次对某一个月份的所有商品进行了排序(按销额降序),其本质跟order by类似,只是多了一个列并带有排序的序号,这样我们可以取任意序号的一行数据。而第二次查询我们对商品进行了分组,对不同的商品分开排序,相当于自己跟自己对比,不是捏在一起做排序,这样可以看到每个商品哪个月卖得好,哪个月卖得相对不太好。

 

2、rank()和dense_rank()

这两个函数必须放在一起才好说明

(1)查询某一个商品的单价情况


    SELECT RANK()OVER(ORDER BY price) row,* FROM  tmp.dbo.goodsinfo 
    WHERE goodsid='1106805'
    

技术分享-SQL-(1)四大排序/分析函数_第3张图片

 

(2)查询某一个商品的单价情况

技术分享-SQL-(1)四大排序/分析函数_第4张图片

 

(3)仔细观察两次查询的结果,dense_rank是没有跳跃的排名,这种情况大多用在对学生成绩进行排名的时候用

 

3、nitle

SELECT NTILE(10)OVER(ORDER BY value desc) row,* FROM  tmp.dbo.goodsinfo 
    WHERE the_month=201806

技术分享-SQL-(1)四大排序/分析函数_第5张图片

 

该函数先将数据按order by的条件进行排序,然后分成按顺序分成10份。等于将数据按百分比等分成10。一百条数据,每10条就是一个分组。

另:当数据不是10的整数时,会是什么情况?这个问题各位可以自行测试。

 

你可能感兴趣的:(sql)