窗口函数

mysql常见的窗口函数:


rank()、dense_rank()、row_number()的区别
rank():如果有并列名次的行,会占用下一名次的位置。(比如三个人分数都是最高,那三个人并列第一,下一个人第四)
dense_rank():如果有并列名次的行,不占用下一名次的位置。(比如三个人分数都是最高,那三个人并列第一,下一个人第二)
row_number():不考虑并列名次的情况(比如三个人相同名次直接第一第二第三名)

  • 其中,DENSE_RANK() 函数的语法如下:
DENSE_RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
)
//在这个语法中:
//首先,PARTITION BY子句将FROM子句生成的结果集划分为分区。DENSE_RANK()函数应用于每个分区。
其次,ORDER BY  子句指定DENSE_RANK()函数操作的每个分区中的行顺序。

例题:




题解:

SELECT t.dept_no,t.emp_no,t.salary AS maxSalary 
FROM (SELECT d.dept_no,d.emp_no,s.salary,
      DENSE_RANK() OVER (PARTITION BY d.dept_no ORDER BY s.salary DESC) AS sal_rank
      FROM dept_emp d 
      INNER JOIN salaries s 
      ON d.emp_no = s.emp_no) t
WHERE t.sal_rank = 1
ORDER BY t.dept_no;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SQL窗口函数 partition by order by rank, dense_rank, row_numbe...
    Carver_阅读 406评论 0 1
  • 一、窗口函数的作用 在日常工作中,经常会遇到每组内进行排名,比如下面的业务需求 排名问题:每个部门按业绩进行排...
    一只胖猪猪阅读 266评论 0 0
  • 一、窗口函数的使用场景 作为IT人士,日常工作中经常会遇到类似这样的需求: 医院看病,怎样知道上次就医距现在的时间...
    carter记录阅读 576评论 0 0
  • MySQL 8.0窗口函数[https://www.cnblogs.com/DataArt/p/9961676.h...
    lz做过前端阅读 315评论 0 0
  • MySQL数据库专栏:简书:https://www.jianshu.com/nb/42057860知乎:https...
    KM_0d16阅读 1,706评论 0 1