当前位置: 首页 > news >正文

做网站的公司前三名手机端网站模板下载

做网站的公司前三名,手机端网站模板下载,基于h5的wap网站开发,wordpress插件预订本章来讲解一下经常使用的排序函数,可以用来进行统计成绩排名、售卖情况排名等。 目录 1.row_number函数、rank函数、dense_rank函数的区别和用法 1.row_number函数 2.rank函数 3.dense_rank函数 2.partition by函数的用法 1、over函数的写法: 2…

本章来讲解一下经常使用的排序函数,可以用来进行统计成绩排名、售卖情况排名等。

目录

1.row_number函数、rank函数、dense_rank函数的区别和用法

1.row_number函数

2.rank函数

3.dense_rank函数

2.partition by函数的用法

1、over函数的写法:

2、分区函数Partition By与rank()的用法“对比”分区函数Partition By与row_number()的用法

2、分区函数Partition By与rank()的用法“对比”分区函数Partition By与dense_rank()的用法


 

1.row_number函数、rank函数、dense_rank函数的区别和用法

1.row_number函数

row_number的用途非常广泛,排序最好用它,它会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要用over子句选择对某一列进行排序才能生成序号。

2.rank函数

rank函数用于返回结果集的分区内每行的排名,行的排名是相关行之前的排名数加一。简单来说rank函数就是对查询出来的记录进行排名,与row_number函数不同的是,rank函数考虑到了over子句中排序字段值相同的情况,如果使用rank函数来生成序号,over子句中排序字段值相同的序号是一样的,后面字段值不相同的序号将跳过相同的排名号排下一个,也就是相关行之前的排名数加一,可以理解为根据当前的记录数生成序号,后面的记录依此类推。

3.dense_rank函数

dense_rank函数的功能与rank函数类似,dense_rank函数在生成序号时是连续的,而rank函数生成的序号有可能不连续。dense_rank函数出现相同排名时,将不跳过相同排名号,rank值紧接上一次的rank值。在各个分组内,rank()是跳跃排序,有两个第一名时接下来就是第三名,dense_rank()是连续排序,有两个第一名时仍然跟着第二名。

借助实例能更直观地理解:

假设现在有一张学生表student,学生表中有姓名、分数、课程编号。

select * from student;

 现在需要按照课程对学生的成绩进行排序:

--row_number() 顺序排序
select name,course,row_number() over(partition by course order by score desc) rank from student;

--rank() 跳跃排序,如果有两个第一级别时,接下来是第三级别
select name,course,rank() over(partition by course order by score desc) rank from student;

--dense_rank() 连续排序,如果有两个第一级别时,接下来是第二级别 
select name,course,dense_rank() over(partition by course order by score desc) rank from student;

取得每门课程的第一名:

 

--每门课程第一名只取一个: 
select * from (select name,course,row_number() over(partition by course order by score desc) rank from student) where rank=1;
--每门课程第一名取所有: 
select * from (select name,course,dense_rank() over(partition by course order by score desc) rank from student) where rank=1;
--每门课程第一名取所有:
select * from (select name,course,rank() over(partition by course order by score desc) rank from student) where rank=1;

 

  附:每门课程第一名取所有的其他方法(使用group by 而不是partition by):

 

select s.* from student sinner join(select course,max(score) as score from student group by course) con s.course=c.course and s.score=c.score; 
--或者使用using关键字简化连接
select * from student sinner join(select course,max(score) as score from student group by course) cusing(course,score);

 

关于Parttion by:

  Parttion by关键字是Oracle中分析性函数的一部分,用于给结果集进行分区。它和聚合函数Group by不同的地方在于它只是将原始数据进行名次排列,能够返回一个分组中的多条记录(记录数不变),而Group by是对原始数据进行聚合统计,一般只有一条反映统计值的结果(每组返回一条)。

  TIPS:

  使用rank over()的时候,空值是最大的,如果排序字段为null, 可能造成null字段排在最前面,影响排序结果。

  可以这样: rank over(partition by course order by score desc nulls last)

总结:

  在使用排名函数的时候需要注意以下三点:

  1、排名函数必须有 OVER 子句。

  2、排名函数必须有包含 ORDER BY 的 OVER 子句。

  3、分组内从1开始排序。

2.partition by函数的用法

group by是分组函数,partition by是分区函数(像sum()等是聚合函数),注意区分。

1、over函数的写法:

over(partition by cno order by degree )

先对cno 中相同的进行分区,在cno 中相同的情况下对degree 进行排序

2、分区函数Partition By与rank()的用法“对比”分区函数Partition By与row_number()的用法

例:查询每名课程的第一名的成绩

(1)使用rank()

SELECT	* 
FROM	(select sno,cno,degree,rank()over(partition by cno order by degree desc) mm from score) 
where mm = 1;

得到结果:
在这里插入图片描述

(2)使用row_number()

SELECT * 
FROM   (select sno,cno,degree,row_number()over(partition by cno order by degree desc) mm from score) 
where mm = 1;

得到结果:
在这里插入图片描述

(3)rank()与row_number()的区别

由以上的例子得出,在求第一名成绩的时候,不能用row_number(),因为如果同班有两个并列第一,row_number()只返回一个结果。

2、分区函数Partition By与rank()的用法“对比”分区函数Partition By与dense_rank()的用法

例:查询课程号为‘3-245’的成绩与排名

(1) 使用rank()

SELECT * 
FROM   (select sno,cno,degree,rank()over(partition by cno order by degree desc) mm from score) 
where cno = '3-245'

得到结果:
在这里插入图片描述

(2) 使用dense_rank()

SELECT * 
FROM   (select sno,cno,degree,dense_rank()over(partition by cno order by degree desc) mm from score) 
where cno = '3-245'

得到结果:
在这里插入图片描述

(3)rank()与dense_rank()的区别

由以上的例子得出,rank()和dense_rank()都可以将并列第一名的都查找出来;但rank()是跳跃排序,有两个第一名时接下来是第三名;而dense_rank()是非跳跃排序,有两个第一名时接下来是第二名。

参考:Oracle中row_number()、rank()、dense_rank() 的区别

参考:分区函数Partition By的用法

http://www.yayakq.cn/news/987774/

相关文章:

  • 做仿制网站网页ui设计模板代码
  • 天津建设网站首页网站建设项目评审意见
  • 网站 做 app房屋室内装修设计
  • 怎么在招聘网站做评估做图片网站会侵权吗
  • 视频在线制作网站荆州网站建设费用
  • 营销软件网站常州经开区建设局网站
  • 宁国市网站建设网站做系统下载
  • WordPress情侣网站绍兴企业自助建站
  • 公司网站模板设计wordpress小分类主题
  • 蒙古文网站建设工作计划wordpress栏目在哪里设置
  • 百度移动端网站两个网站合并建设实施方案
  • 长沙中小企业网站建设wordpress 宽屏 主题
  • 网站空间服务怎么做刷qq业务网站
  • 广州手机网站定制如何品牌策划设计
  • 关于网站建设的指标使用docker部署wordpress
  • shopify建站网页链接制作生成二维码
  • 企业网络推广网站一般网站开发好的框架都有哪些
  • wordpress如何搭建一个购物网站大连公司做网站
  • 网站开发模块的需求分析本科自考怎么报名
  • 网站建设服务费怎么入账joomla功能型网站建设
  • 做网站需要什么服务器配置c语言开发网站教程
  • 网站开发薪水一般多少做医院的网站 配色怎么选择
  • 网站建设实训的方法广州网站设计公司招聘
  • 白酒网站的建设岳麓区专业的建设网站公司
  • 描述建设网站的一个具体步骤做网站大约要多少钱
  • 宿州网站建设公司企业网站推广定义
  • 网站备案 排名影响wordpress页面更新发布失败
  • 江苏10大网站建设公司虚拟仪器应用系统的开发平台
  • 专业微信网站建设wordpress版5.2
  • 18岁以上站长统计wordpress封面图七牛