SQL87 最差是第几名(一)

本题链接
表结构如下所示。

+——-+——–+
| grade | number |
+——-+——–+
| A | 2 |
| D | 1 |
| C | 2 |
| B | 2 |
+——-+——–+

首先将题目给定的表按grade升序,如下

+——-+——–+
| grade | number |
+——-+——–+
| A | 2 |
| B | 2 |
| C | 2 |
| D | 1 |
+——-+——–+

即A等级2位,B等级2位,C等级2位,D等级1位。
则每个等级的最差名次为 该等级及其以上等级的人数之和

窗口函数

这里介绍一种使用窗口函数(Window Function)的解法。我们可以把窗口函数简单理解为一种类集函数(aggregate-like operation),但它并不像集函数一样仅仅输出一行结果,而是针对每一行输出与之相关的结果(这里要结合本题具体理解)。
这里因为要求和,所以使用SUM()作为窗口函数。事实上,大多数集函数都可以作为窗口函数。
窗口函数需要搭配OVER子句使用,语法如下:

OVER (PARTITION BY expr [, expr] ... ORDER BY expr [ASC|DESC] [, expr [ASC|DESC]] ...)

其中PARTITION BY子句的功能在于对表进行分组,省略时仅分一组(未分组)。请看以下这条命令及其查询结果:

SELECT *,SUM(number) OVER(PARTITION BY grade) AS total FROM class_grade

SQL87 最差是第几名(一)
结果显示,按照grade划分,表中的每一行各自为一个窗口。因此求和操作仅对一行进行。
而ORDER BY子句规定了每个划分内的排序方式,默认升序。请看以下这条命令及其查询结果:
SELECT *,SUM(number) OVER(ORDER BY grade) AS total FROM class_grade

SQL87 最差是第几名(一)
可以发现四个窗口交叠在了一起。
至此,给出该题的解:
SELECT grade, SUM(number) OVER(ORDER BY grade) AS t_rank FROM class_grade;

Original: https://www.cnblogs.com/a-tester/p/16002152.html
Author: ATester
Title: SQL87 最差是第几名(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607028/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [Git]Github代码版本管理

    参考: 安装Git 配置工具 对所有本地仓库的用户信息进行配置 $ git config –global user.name "[name]" 对你的comm…

    Linux 2023年6月13日
    0139
  • ELK时间戳

    ELK时间戳 在我们使用ELK过程中,总会遇到时间戳的问题。首先 logstash如果没有加以处理的话,那么它默认使用的是采集的时间戳,然后存入 ES。那么这样的话时间显示的是错误…

    Linux 2023年6月8日
    099
  • Docker 安装 MySQL、Redis

    1 Docker 中安装 Redis 1.1 创建目录 在硬盘上创建 redis 的数据目录: mkdir -p /Users/yygnb/dockerMe/redis/data …

    Linux 2023年6月7日
    0102
  • 初识pytest

    现在这份工作一直做硬件和算法方面,但本人还是很喜欢玩web,所以自学分享一下。 如何安装pytest 其实很简单 pip install pytest pip install -U…

    Linux 2023年6月8日
    093
  • 给亨亨猫软件配置系统代理下载国外视频

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    095
  • 如何使用 systemctl 管理服务

    systemd是一个服务管理器,目前已经成为Linux发行版的新标准。它使管理服务器变得更加容易。了解并利用组成systemd的工具将有助于我们更好地理解它提供的便利性。 syst…

    Linux 2023年6月13日
    077
  • Podman基础用法

    Podman基础 1、什么是Podman? Podman是一种开源的Linux原生工具,旨在根据开放容器倡议(Open Container Initiative,OCI)标准开发、…

    Linux 2023年6月7日
    091
  • 一文带你掌握Spring Web异常处理方式

    一、前言 最近从单位离职了,离开了五年多来朝朝夕夕皆灯火辉煌的某网,激情也好悲凉也罢,觥筹场上屡屡物是人非,调转过事业部以为能换种情绪,岂料和下了周五的班的前同事兼好朋友,匆匆赶往…

    Linux 2023年6月6日
    087
  • Windows下的SSH Server

    (请注意,本文内容以杂谈为主,稍微提及了一些在MobaXterm中开启SSH Server可能遇到的情况和解决方法,没有多少干货,请酌情查看,谢谢) 最近比较无聊,使用MobaXt…

    Linux 2023年6月6日
    0102
  • php+nginx环境搭建

    1、安装基础环境: yum -y install gcc bison bison-devel zlib-devel libmcrypt-devel mhash-devel open…

    Linux 2023年6月6日
    086
  • 使用idea操作git(ssh协议)

    问题 我们发现,使用IDEA上的git功能,当使用ssh协议出现了可以commit但无法push和pull的问题,经过测试发现原因是Could not read from rems…

    Linux 2023年6月6日
    0129
  • 不自由的自由职业

    大家好。我叫梁旭,以前是农民,现在是自由职业者。 [En] Hello, everyone. I’m Liangxu, a former farmer, and now…

    Linux 2023年5月27日
    0122
  • zabbix监控配置

    zabbix监控配置 zabbix监控配置 zabbix通过web界面配置邮件告警 zabbix配置客户端监控 创建主机组 创建监控主机并将主机加入主机组 添加监控项 配置触发器 …

    Linux 2023年6月13日
    098
  • 所学自省

    本文是根据在大学的这几年接触的东西写的,给同为软件的,需要的同学参考参考,看看这几年自己在大学学了多少东西。 你学过的东西写了多少笔记?又记得多少?自己主动去设计一个项目来做的,有…

    Linux 2023年6月14日
    096
  • shell多线程运行程序

    #!/bin/bash function my_cmd(){ sleep 1 } date tmp_fifofile="/tmp/$$.fifo" mkfifo…

    Linux 2023年6月6日
    0112
  • canal-1.1.5实时同步MySQL数据到Elasticsearch

    一、环境准备 1、jdk 8+ 2、mysql 5.7+ 3、Elasticsearch 7+ 4、kibana 7+ 5、canal.adapter 1.1.5 二、部署 一、创…

    Linux 2023年6月13日
    0109
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球