• sqlserver中分区函数 partition by的用法


    partition  by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,

    partition  by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组。

    partition by 与group by不同之处在于前者返回的是分组里的每一条数据,并且可以对分组数据进行排序操作。后者只能返回聚合之后的组的数据统计值的记录。

    Demo 

    数据库表结构 学生成绩表 UserGrade

    Id        int              Checked     主键Id
    Name   varchar(50) Checked     学生名
    Course varchar(50) Checked     课程名
    Score   int             Checked      分数

    01、把每个人学生的成绩按照升序排名 (思路:根据学生姓名分组 根据每个人成绩排序)

    sql语句 

    select *,ROW_NUMBER() over( partition by Name order by Score )排名
    from UserGrade

    查询结果

    Id Name Course Score 排名
    1004 李四 数学 60 1
    1005 李四 语文 80 2
    1001 李四 英语 100 3
    1007 王五 数学 30 1
    1006 王五 语文 50 2
    1003 王五 英语 50 3
    1008 张三 英语 60 1
    1000 张三 语文 80 2
    1002 张三 数学 90 3

    02、把每个学科的成绩分别进行排名 (思路:根据学科分组 根据成绩排序)

    sql语句 

    select *,ROW_NUMBER() over( partition by Course order by Score )排名
    from UserGrade

    查询结果

    Id Name Course Score 排名
    1002 张三 数学 90 1
    1004 李四 数学 60 2
    1007 王五 数学 30 3
    1001 李四 英语 100 1
    1008 张三 英语 60 2
    1003 王五 英语 50 3
    1000 张三 语文 80 1
    1005 李四 语文 80 2
    1006 王五 语文 50 3

  • 相关阅读:
    CodeSmith快速向导
    生活忠告
    MSF 组队模型
    Javascript 全面理解 caller,callee,call,apply
    Sys.WebForms.PageRequestManagerServerErrorException(status code 500 OR 12031)
    经典问题:向setTimeout传递函数参数
    [转]JavaScript面向对象的特性
    数据库设计的体会
    Geomedia性能
    关于在SVG中如何实现gif动画的问题?
  • 原文地址:https://www.cnblogs.com/zhangchengye/p/5473860.html
Copyright © 2020-2023  润新知