当前位置: 首页 > news >正文

做题笔记:SQL Sever 方式做牛客SQL的题目--查询每天刷题通过数最多的前二名用户

----查询每天刷题通过数最多的前二名用户id和刷题数
现有牛客刷题表questions_pass_record,请查询每天刷题通过数最多的前二名用户id和刷题数,输出按照日期升序排序,查询返回结果名称和顺序为:
date|user_id|pass_count

表单创建和数据的插入:

drop table if exists questions_pass_record;
CREATE TABLE questions_pass_record
(user_id       int         NOT NULL,question_type varchar(32) NOT NULL,device        varchar(14) NOT NULL,pass_count    int         NOT NULL,date          date        NOT NULL
);
INSERT INTO questions_pass_record
VALUES (101, 'java', 'app', 2, '2020-03-01');
INSERT INTO questions_pass_record
VALUES (102, 'sql', 'pc', 15, '2020-03-01');
INSERT INTO questions_pass_record
VALUES (102, 'python', 'pc', 9, '2021-04-09');
INSERT INTO questions_pass_record
VALUES (202, 'python', 'pc', 11, '2021-04-09');
INSERT INTO questions_pass_record
VALUES (104, 'python', 'app', 3, '2021-04-09');
INSERT INTO questions_pass_record
VALUES (105, 'sql', 'pc', 60, '2018-08-15');
INSERT INTO questions_pass_record
VALUES (104, 'sql', 'pc', 20, '2018-08-15');
INSERT INTO questions_pass_record
VALUES (304, 'sql', 'pc', 10, '2018-08-15');

查询语句:

 select  user_id,pass_countfrom (select date,user_id,pass_count,dense_rank( )over(PARTITION BY user_id ORDER BY date ) as rank_numfrom questions_pass_recordgroup by date,user_id,pass_count) twhere rank_num in (1,2)

在查询中:
DENSE_RANK( ) 函数用于在每个分组内按照指定的排序方式为行分配一个排名值,排名值可以重复,并且不存在断开的排名。通过使用 DENSE_RANK( ) 函数,可以方便地为每个分组内的行分配排名值,用于处理需要对数据进行排名和分组的情况。

语法:

DENSE_RANK() OVER (PARTITION BY column1 ORDER BY column2)

PARTITION BY 指定了分组的列,ORDER BY 指定了排序的列。

dense_rank( )over(PARTITION BY user_id ORDER BY date ) as rank_num

使用 DENSE_RANK( ) 函数为每个分组内的行分配一个排名值,分组依据是 user_id 列,排序依据是 date 列,将排名值命名为 rank_num。

需要注意
RANK( )DENSE_RANK( )ROW_NUMBER( ) 函数是用于计算和分配行排序值的窗口函数。它们在使用 OVER 子句时可以根据指定的排序规则为结果集中的行分配排名、稠密排名或行号。
RANK( ) 函数:
RANK( ) 函数为结果集中的行分配排名值,并且具有相同值的行将具有相同的排名值,随后的排名值将会跳过相同的排名并递增

示例,查询学生成绩排名:

select *,rank() over (order by Score desc) as rank_over
from Stu_Scores

执行结果:
在这里插入图片描述

DENSE_RANK( ) 函数:
DENSE_RANK( ) 函数为结果集中的行分配稠密排名值,具有相同值的行将具有相同的排名值,但排名值不会跳过
示例,查询学生成绩排名:

select *,dense_rank() over (order by Score desc) as dense_rank_over
from Stu_Scores

执行结果:
在这里插入图片描述

ROW_NUMBER( ) 函数:
ROW_NUMBER( ) 函数为结果集中的行分配唯一的行号,每行的行号都是唯一的。
示例,查询学生成绩排名:

select *,row_number() over (order by Score desc) as row_number_over
from Stu_Scores

执行结果:
在这里插入图片描述
可根据实际需求选择需要使用的函数。

http://www.lryc.cn/news/259204.html

相关文章:

  • Vue3 用 Proxy API 替代 defineProperty API 的那些事
  • 成都工业学院Web技术基础(WEB)实验五:CSS3动画制作
  • 【Docker】学习笔记(三)三剑客之 docker-compose文件书写项目多服务容器运行
  • node.js基础
  • fastapi实现websocket在线聊天
  • LLM推理部署(六):TogetherAI推出世界上LLM最快推理引擎,性能超过vLLM和TGI三倍
  • Unity | 渡鸦避难所-2 | 搭建场景并添加碰撞器
  • 展望2024年供应链安全
  • React 列表页实现
  • 【程序人生】还记得当初自己为什么选择计算机?
  • 9-tornado-Template优化方法、个人信息案例、tornado中ORM的使用(peewee的使用、peewee_async)、WTForms的使用
  • IDEA中.java .class .jar的含义与联系
  • 北斗三号短报文森林消防应急通信及天通野外图传综合方案
  • js Array.every()的使用
  • 前端编码中快速填充内容--乱数假文
  • 数据结构二维数组计算题,以行为主?以列为主?
  • springboot(ssm电影院订票信息管理系统 影院购票系统Java系统
  • AI 问答-供应链管理-相关概念:SCM、SRM、MDM、DMS、ERP、OBS、CRM、WMS...
  • 初学vue3与ts:vue3选项式api获取当前路由地址
  • 2023最新大模型实验室解决方案
  • leetcode707.设计链表
  • 【K8s】Kubernetes CRD 介绍(控制器)
  • Python 小程序之PDF文档加解密
  • 使用python脚本一个简单的搭建ansible集群
  • 【价值几十万的仿抖音直播电商系统源码共享】
  • 对于vue3项目中使用shareReward还是shareReward.value的问题
  • 利用websockify将websocket通信转换成tcp
  • 【LeetCode刷题】-- 163.缺失的区间
  • ClickHouse为何如此之快
  • Avalonia中如何将View事件映射到ViewModel层