zoukankan      html  css  js  c++  java
  • ROW_NUMBER() OVER函数运用

    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

    PARTITION BY:相当于数据库中的group by

    说明:row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值表示每组排序后的顺序编号(从1开始,组内连续的唯一的编号)

    --新建表Table_A

    create table Table_A(name varchar(8),Subject varchar(8),Grade int)
    insert into Table_A values('小A','数学',90)
    insert into Table_A values('小A','语文',79)
    insert into Table_A values('小A','英语',88)
    insert into Table_A values('小B','数学',99)
    insert into Table_A values('小B','语文',76)
    insert into Table_A values('小B','英语',82)
    insert into Table_A values('小C','数学',78)
    insert into Table_A values('小C','语文',67)
    insert into Table_A values('小C','英语',81)
    insert into Table_A values('小D','数学',93)
    insert into Table_A values('小D','语文',75)
    insert into Table_A values('小D','英语',84)

    --原始表

    select * from Table_A

    name Subject Grade
    小A 数学 90
    小A 语文 79
    小A 英语 88
    小B 数学 99
    小B 语文 76
    小B 英语 82
    小C 数学 78
    小C 语文 67
    小C 英语 81
    小D 数学 93
    小D 语文 75
    小D 英语 84

    --执行以下语句后

    select ROW_NUMBER() OVER(PARTITION BY name order by Grade desc) as id,name,Subject,Grade from Table_A

    id name Subject Grade
    1 小A 数学 90
    2 小A 英语 88
    3 小A 语文 79
    1 小B 数学 99
    2 小B 英语 82
    3 小B 语文 76
    1 小C 英语 81
    2 小C 数学 78
    3 小C 语文 67
    1 小D 数学 93
    2 小D 英语 84
    3 小D 语文 75

    --根据字段name分组,Grade排序

    --提取成绩中的最大值,可用以下语句

    select * from
    (
        select ROW_NUMBER() OVER(PARTITION BY name order by Grade desc) as id,name,Subject,Grade from Table_A
    )TT where id = 1

    --每名学生,只显示前2单成绩,修改代码为以下即可

    select * from
    (
        select ROW_NUMBER() OVER(PARTITION BY name order by Grade desc) as id,name,Subject,Grade from Table_A
    )TT where id between 1 and 2

  • 相关阅读:
    写代码实现两个 goroutine,其中一个产生随机数并写入到 go channel 中,另外一 个从 channel 中读取数字并打印到标准输出。最终输出五个随机数。
    05| RWMutex:读写锁的实现原理及避坑指南
    go 面试题
    go 局部变量在哪
    12 _ atomic:要保证原子操作,一定要使用这几种方法
    11 _ Context:信息穿透上下文
    什么是线程
    go面试题
    redis连接池 go
    docker 指定版本rpm包安装
  • 原文地址:https://www.cnblogs.com/hbwy/p/4914155.html
Copyright © 2011-2022 走看看