【MySQL】第N高、分数排名等练习
题目来源于leecode
第N高薪水#
解法:
-
自连接或笛卡尔积,连接条件为a表salary小于等于b表salary
-
根据a表薪水字段分组,统计a表中每个salary分组后对应b表中salary唯一值个数,count(distinct b.salary)
-
having步骤2中的count =N,即实现了该分组中表1salary排名为第N个
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
# Write your MySQL query statement below.
select a.Salary as 'getNthHighestSalary(N)'
from employee a,employee b
where a.Salary <= b.Salary
GROUP BY a.Salary
having count(DISTINCT b.Salary)=N
);
END
各部门第2高薪水#
解法:
- 自连接或笛卡尔积,连接条件为a表salary小于等于b表salary
- 因为是各部门所以要部门ID相等,不然会和其他部门比较
- 根据a表名字字段分组,薪水不可以
- 统计b表薪水字段的count,记得要去重
- Having count()=2
SELECT
a.DepartmentId,
a.Salary,
a.NAME
FROM
employee a,
employee b
WHERE
a.Salary <= b.Salary
AND a.DepartmentId = b.DepartmentId
GROUP BY
a.NAME
HAVING
count( DISTINCT b.Salary ) =2
如果加个部门表,要输出部门名称
SELECT
c.Name as 'departmentName',
a.Salary,
a.NAME
FROM
employee a,
employee b ,
department c
WHERE
a.Salary <= b.Salary
AND a.DepartmentId = b.DepartmentId
and a.DepartmentId=c.Id
GROUP BY
a.NAME
HAVING
count( DISTINCT b.Salary ) =2
部门工资最高的员工#
方法一
- 找出表1各部门薪水最高,使用分组+max()
- 两表相联,where in 第一步的部门id 和薪水
SELECT
department.NAME,
employee.NAME,
employee.Salary
FROM
employee
JOIN department ON employee.DepartmentId = department.Id
WHERE
( employee.DepartmentId, employee.Salary ) IN ( SELECT DepartmentId, max( Salary ) FROM employee GROUP BY employee.DepartmentId )
方法二
- 自连接或笛卡尔积,连接条件为a表salary小于等于b表salary
- 因为是各部门所以要部门ID相等,不然会和其他部门比较
- 根据a表名字字段分组,薪水不可以
- 统计b表薪水字段的count,记得要去重
- Having count()=1
SELECT
c.Name as 'Department',
a.NAME as 'Employee',
a.Salary
FROM
employee a,
employee b ,
department c
WHERE
a.Salary <= b.Salary
AND a.DepartmentId = b.DepartmentId
and a.DepartmentId=c.Id
GROUP BY
a.NAME
HAVING
count( DISTINCT b.Salary ) =1
分数排名#
解法:
- 自连接或笛卡尔积,连接条件为a表s分数小于等于b表分数
- 根据a表ID字段分组
- 统计b表分数字段的count,记得要去重
- 根据分数倒序
select a.Score,count(distinct b. Score) as 'Rank'
from Scores a ,Scores b
where a.Score<=b.Score
group by a.Id
order by a.Score desc
作者: 是小鱼呀
出处:https://www.cnblogs.com/sophia12138/p/15840329.html
本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)