SQL分组排序

作者: 敢敢宝宝 | 来源:发表于2019-06-01 22:13 被阅读13次

面试的时候,只要这个工作要求SQL能力,面试官必然会问SQL怎么实现分组排序?刚开始,我一直以为是没有分组排序这个函数的。直到第一次去面试腾讯时,笔试题目中有一题是分组排序,我写得是变量赋值排序。面试官一脸懵逼的看着我,又问道有什么直接的函数吗?这一问,真把我难住了。这位面试官比较nice,很耐心的跟我说:你回去查查这个三个函数的用法及区别rank()over()、row_number()over()、dense_rank()over()

1.row_number()over()分组排序功能:

在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by order by 的执行。 partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录。

例:employee,根据部门分组排序
select empno,workdept,salary,row_number()over(partition by workdept order by salary desc) 
as rank from data.employee

2.rank()over()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)

select workdept,salary,rank()over(partition by workdept order by salary desc) as rank from enployee 
order by workdept desc

3.dense_rank() over()是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的

select workdept,salary,dense_rank()over(partition by workdept order by salary desc) as rank from employee 
order by workdept
ROW_NUMBER删除重复数据 :

—假设表TAB中有a,b,c三列,可以使用下列语句删除a,b,c都相同的重复行。

DELETE FROM (select year,QUARTER,RESULTS,row_number() 
over(partition by YEAR,QUARTER,RESULTS order by YEAR,QUARTER,RESULTS) 
AS ROW_NO FROM SALE )   
WHERE ROW_NO>1  
注:上面三个函数是Oracle数据库实现的分组排序,MYSQL没有这三个函数。实现分组排序需要设置变量赋值,见MYSQL如何实现row_number()over()函数功能

相关文章

  • SQL分组排序

    面试的时候,只要这个工作要求SQL能力,面试官必然会问SQL怎么实现分组排序?刚开始,我一直以为是没有分组排序这个...

  • sql实现分组排序

    1. 首先是mysql实现分组排序 如下scores表记录了某次考试各班级学生的成绩:id是学号(主键),clas...

  • sql server 分组排序

    https://www.cnblogs.com/scwbky/p/9558203.html

  • SQL分组并排序

  • 获取分组中的最值(group by order by )

    使用子查询。limit:防止优化器对sql进行优化,导致分组排序无效

  • Sql 分组自定义排序

    1、实现效果 使用去重或分组,数据库默认按字符排序,特定场景下需自定义排序原本思路,先去重,再联表保证自定义顺序改...

  • 结果集排序问题

    结果集的排序分为以sql排序还有就是需要使用集合Collections方法进行排序一、sql排序sql排序分为升序...

  • MYSQL数据库常用操作

    一.准备及介绍 1、本文介绍: 1.结果集分组排序 2.sum、count、max、min、avg等sql应用语句...

  • ORDER BY 子句中的 CASE WHEN THEN

    THEN 后跟数字 对于SQL: 这里可以理解为分组排序,比如说,学生排队,凡是姓张的,我们给他们贴个标签“1”,...

  • 从零学会SQL:汇总分析

    一、知识点 汇总函数 分组 排序 分页 SQL运行顺序 二、练习 1、查询课程编号为“0002”的总成绩 分析思路...

网友评论

    本文标题:SQL分组排序

    本文链接:https://www.haomeiwen.com/subject/hdhotctx.html