zoukankan      html  css  js  c++  java
  • Oracle中开窗函数row_number()、rank()、dense_rank()

    最近练习SQL中遇到两道开窗函数题目在此记录

    例一:成绩表

    SC(Sno,Cno,score)
    --Sno 学生编号,Cno 课程编号,score 分数

    要求:查询各科成绩前三名的记录:(不考虑成绩并列情况)

    1 select *
    2   from (select sno,
    3                cno,
    4                score,
    5                row_number() over(partition by cno order by score desc) rn
    6           from sc)
    7  where rn < 4

    例二:第二高的薪水

    https://leetcode-cn.com/problems/second-highest-salary/

    1 select max(salary) as SecondHighestSalary
    2   from (select salary, row_number() over(order by salary desc) rn
    3           from employee)
    4  where rn = 2

    说明:

    1、原先自己写答案的时候,没有加max()导致提交失败。后续思考才明白为什么要加max():使用dense_rank()函数时,有可能会有rn=2 返回多条的情况,根据题目要求需要取第二高薪水,返回值应为一条;

    2、另外为什么要使用dense_rank()函数:

         rank()函数首先被排除,在rn=1有两个值的情况下,失败;
         row_number()函数在入参为{"headers": {"Employee": ["Id", "Salary"]}, "rows": {"Employee": [[1, 100], [2, 100]]}}情况下失败;

    参考文档:https://www.cnblogs.com/qiuting/p/7880500.html

  • 相关阅读:
    3.12
    3.11
    安卓开发
    安卓开发
    安卓开发
    安卓开发
    安卓开发
    安卓开发
    安卓开发
    安卓开发
  • 原文地址:https://www.cnblogs.com/peixk/p/13670043.html
Copyright © 2011-2022 走看看