美文网首页
【MySQL】排序取Top

【MySQL】排序取Top

作者: 宅家学算法 | 来源:发表于2022-07-12 08:52 被阅读0次

leetcode 176

力扣 176

第二高理解为相同薪水同一等级,且连续排序

SELECT
    IFNULL(
      (SELECT DISTINCT Salary
       FROM Employee
       ORDER BY Salary DESC
        LIMIT 1 OFFSET 1),
    NULL) AS SecondHighestSalary

拓展->分组排序

  • ROW_NUMBER:它为从1开始应用的每一行分配一个序号,递增
ROW_NUMBER() OVER (
<PARTITION BY <expression>,[{,<expression>}...] >
 <ORDER BY <expression> [ASC|DESC],[{,<expression>}...]>) 

例:
SELECT 
 ROW_NUMBER() OVER (
 ORDER BY productName
 ) row_num,
    productName,
    msrp
FROM 
 products
ORDER BY 
 productName; 
  • RANK()函数为结果集的分区中的每一行分配一个排名,行的等级由1加上前面的等级数指定。同等至排序相同,下一等级跳跃排序,如排序结果图
RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
) 

例:
SELECT
    val,
    RANK() OVER (
        ORDER BY val
    ) my_rank
FROM
    rankDemo; 
排序结果
  • DENSE_RANK():为分区或结果集中的每一行分配排名,而排名值没有间隙
DENSE_RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
) 

例:
SELECT
    val,
    DENSE_RANK() OVER (
        ORDER BY val
    ) my_rank
FROM
    rankDemo; 
排序结果

对比

val ROW_NUMBER RANK() DENSE_RANK()
1 1 1 1
2 2 2 2
2 3 2 2
3 4 4 3
4 5 5 4
4 6 5 4
5 7 7 5

相关文章

网友评论

      本文标题:【MySQL】排序取Top

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