zoukankan      html  css  js  c++  java
  • 分组函数 partition by 的详解,与order 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

  • 相关阅读:
    大话位运算
    Docker部署jar包
    linux系统备份mysql数据库
    关于Centos7 firewalld防火墙开放端口后仍不能访问ftp和nginx的问题解决
    MySql查询当天、本周、本月、本季度、本年的数据
    c#模拟线性回归
    监控服务器配置(五)-----Redis_exporter安装配置
    监控服务器配置(二)-----Grafana安装配置
    监控服务器配置(三)-----Node_exporter安装配置
    js网页唤起支付宝进行支付
  • 原文地址:https://www.cnblogs.com/mark5/p/11577538.html
Copyright © 2011-2022 走看看