【数据库】排名问题
创始人
2024-05-29 15:47:53
0

  • 返回第N高的一个
    • 解决思路
  • 返回N组中的第N高
    • 解决思路
  • 分数排名
    • 解决思路
      • 窗口函数

数据库经常被用来解决排名问题

返回第N高的一个

单表查询:

表: Employee+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| salary      | int  |
+-------------+------+
Id是该表的主键列。
该表的每一行都包含有关员工工资的信息。编写一个SQL查询来报告 Employee 表中第 n 高的工资。如果没有第 n 个最高工资,查询应该报告为 null 。来源:力扣(LeetCode) https://leetcode.cn/problems/nth-highest-salary

解决思路

使用order by 排序加limit限制。

注意:limit字段只接受正整数,不接受表达式

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGINSET N := N-1;RETURN (# Write your MySQL query statement below.SELECT salaryFROM employeeGROUP BY salaryORDER BY salary DESCLIMIT N, 1);
END

返回N组中的第N高

表: Employee+--------------+---------+
| 列名          | 类型    |
+--------------+---------+
| id           | int     |
| name         | varchar |
| salary       | int     |
| departmentId | int     |
+--------------+---------+
id是此表的主键列。
departmentId是Department表中ID的外键。
此表的每一行都表示员工的ID、姓名和工资。它还包含他们所在部门的ID。表: Department+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| id          | int     |
| name        | varchar |
+-------------+---------+
id是此表的主键列。
此表的每一行都表示一个部门的ID及其名称。编写SQL查询以查找每个部门中薪资最高的员工。
按 任意顺序 返回结果表。
查询结果格式如下例所示。示例 1:输入:
Employee 表:
+----+-------+--------+--------------+
| id | name  | salary | departmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 70000  | 1            |
| 2  | Jim   | 90000  | 1            |
| 3  | Henry | 80000  | 2            |
| 4  | Sam   | 60000  | 2            |
| 5  | Max   | 90000  | 1            |
+----+-------+--------+--------------+
Department 表:
+----+-------+
| id | name  |
+----+-------+
| 1  | IT    |
| 2  | Sales |
+----+-------+
输出:
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Jim      | 90000  |
| Sales      | Henry    | 80000  |
| IT         | Max      | 90000  |
+------------+----------+--------+
解释:Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高。来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/department-highest-salary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解决思路

# Write your MySQL query statement below
select Department.Name as Department,Employee.name as Employee,Employee.Salary 
from Employee,Department 
where Employee.departmentId = Department.id 
and (Employee.salary,Employee.departmentId) 
in (select max(salary),departmentId from Employee group by departmentId);

分数排名

表: Scores+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| score       | decimal |
+-------------+---------+
Id是该表的主键。
该表的每一行都包含了一场比赛的分数。Score是一个有两位小数点的浮点值。编写 SQL 查询对分数进行排序。排名按以下规则计算:分数应按从高到低排列。
如果两个分数相等,那么两个分数的排名应该相同。
在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。
按 score 降序返回结果表。查询结果格式如下所示。示例 1:输入: 
Scores 表:
+----+-------+
| id | score |
+----+-------+
| 1  | 3.50  |
| 2  | 3.65  |
| 3  | 4.00  |
| 4  | 3.85  |
| 5  | 4.00  |
| 6  | 3.65  |
+----+-------+
输出: 
+-------+------+
| score | rank |
+-------+------+
| 4.00  | 1    |
| 4.00  | 1    |
| 3.85  | 2    |
| 3.65  | 3    |
| 3.65  | 3    |
| 3.50  | 4    |
+-------+------+

解决思路

窗口函数

窗口函数的使用方法(rank(),dense_rank(),row_number()为专用窗口函数):

select *,rank() over (order by 成绩 desc) as ranking,dense_rank() over (order by 成绩 desc) as dese_rank,row_number() over (order by 成绩 desc) as row_num
from 班级表

其区别是:

# Write your MySQL query statement below
select score,dense_rank() over (order by score desc) as 'rank'
from scores;

相关内容

热门资讯

C罗双响,利雅得胜利3-1客胜... 4 月5日,沙特阿拉伯联赛第26轮,利雅得新月主场迎战利雅得胜利。比赛中,利雅得胜利由阿里-哈桑率先...
美股收盘:标普指数重挫近6%,... 转自:宁波晚报总台记者当地时间4月4日获悉,美国股市连续第二天遭受重创,当日收盘暴跌。道琼斯工业平均...
俄罗斯驱逐 3名摩尔多瓦外交官   据新华社电 俄罗斯外交部4日就摩尔多瓦政府驱逐3名俄外交官提出抗议,并宣布根据对等原则,驱逐3名...
“暖心敲门”细走访 “极简极...   本报讯(方爽 记者 梁可心)“还是党的政策好,让我的生活有了着落。”日前,南岗区跃进街道困难群众...
怎样判断是不是文物?哪些文物不... 转自:杭州网提起文物,大家首先想到的都是一些收藏品,比如瓷器、字画,不过,文物的概念到底是什么?还有...
缅甸地震已致3354死4508... 转自:央视新闻来源:@央视新闻 如遇作品内容、...
清明祭英烈 书信寄哀思   右图:王艺菲写给杨靖宇将军的信。  本报讯(原野 记者 杜菲菲)笔墨书怀念,深情悼忠魂。又是一年...
广发全球医疗保健指数(QDII... 2025年3月29日,广发基金管理有限公司发布广发全球医疗保健指数(QDII)2024年年度报告。报...
蚕花 水会   4日,浙江省桐乡市洲泉镇2025春季“双庙渚蚕花水会”盛大开幕,请蚕花、祭蚕花、游蚕花等活动轮番...
维康药业成立浙江康源云舟科技有... 证券之星消息,根据天眼查APP数据整理,近日,浙江康源云舟科技有限公司成立,法定代表人为孔晓霞,注册...
华阴老腔艺人的经典歌曲都有哪些... 华阴老腔艺人的经典歌曲都有哪些,求资源
戒情在佛经里又叫什么? 戒情在佛经里又叫什么?戒情在佛经里又叫戒七情六欲
求翻译一段韩语。 求翻译一段韩语。重点是这句:월, 화, 목요일에는 1경기, 수, 금, 토요일에는 2경기씩 진행...
桜ことば浅吟什么意思? 桜ことば浅吟什么意思?桜,是樱。ことば,语言的意思。合在一起,桜ことば局首浅吟,仿毕是中文日文混合的...
对象发视频这个文案,有意义的人... 对象发视频这个文案,有意义的人再等多久都有意义 爱只会在不见面的日子里更加轰烈,我该怎么回复?她应该...
形容为爱的人用心做一件事情的成... 形容为爱的人用心做一件事情的成语 爱一个人,就要做到永远不变心,一心一意地爱TA!,就要做到【矢志不...
俄方任命的赫尔松地区行政长官:... 转自:央视新闻客户端总台记者当地时间4月4日获悉,俄罗斯任命的赫尔松地区行政长官萨利多表示,俄军挫败...
美国国税局将裁员25% 波及约... 转自:央视新闻客户端总台记者当地时间4月4日获悉,美国国税局计划从当天开始裁员25%,裁员约2万人。...
郑钦文止步查尔斯顿站8强 转自:今晚报 #郑钦文0比2亚历山德洛娃#【#郑钦文止步查尔斯顿站8强#】#郑钦文不敌亚历山德...
小朋友说他有超能力老师改怎么回... 小朋友说他有超能力老师改怎么回答?小朋友说他有超能力老师改怎么回答当小朋友说他有超能力的时候,老师应...