首页 > 数据库 >SQL,力扣题目569,员工薪水中位数

SQL,力扣题目569,员工薪水中位数

时间:2024-11-06 10:44:05浏览次数:4  
标签:salary 569 insert company 力扣 into SQL Employee id

一、力扣链接

LeetCode_569

二、题目描述

表: Employee

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| id           | int     |
| company      | varchar |
| salary       | int     |
+--------------+---------+
id 是该表的主键列(具有唯一值的列)。
该表的每一行表示公司和一名员工的工资。

编写解决方案,找出每个公司的工资中位数。

以 任意顺序 返回结果表。

三、目标拆解

四、建表语句

Create table If Not Exists Employee (id int, company varchar(255), salary int)
Truncate table Employee
insert into Employee (id, company, salary) values ('1', 'A', '2341')
insert into Employee (id, company, salary) values ('2', 'A', '341')
insert into Employee (id, company, salary) values ('3', 'A', '15')
insert into Employee (id, company, salary) values ('4', 'A', '15314')
insert into Employee (id, company, salary) values ('5', 'A', '451')
insert into Employee (id, company, salary) values ('6', 'A', '513')
insert into Employee (id, company, salary) values ('7', 'B', '15')
insert into Employee (id, company, salary) values ('8', 'B', '13')
insert into Employee (id, company, salary) values ('9', 'B', '1154')
insert into Employee (id, company, salary) values ('10', 'B', '1345')
insert into Employee (id, company, salary) values ('11', 'B', '1221')
insert into Employee (id, company, salary) values ('12', 'B', '234')
insert into Employee (id, company, salary) values ('13', 'C', '2345')
insert into Employee (id, company, salary) values ('14', 'C', '2645')
insert into Employee (id, company, salary) values ('15', 'C', '2645')
insert into Employee (id, company, salary) values ('16', 'C', '2652')
insert into Employee (id, company, salary) values ('17', 'C', '65')

五、过程分析

1、按照薪资排序

2、找出中位数所在行,列出结果字段

六、代码实现

with t1 as(
    select id, company, salary,
           row_number() over(partition by company order by salary, id) rn1,   -- 需要在salary的基础上再根据id排序
           row_number() over(partition by company order by salary desc, id desc) rn2
    from employee
)
select id, company, salary
from t1
where rn1 = rn2 or rn1 = rn2 - 1 or rn2 = rn1 - 1;

七、结果验证

八、小结

1、CTE表达式 + 排名函数

2、中位数字段升序和降序的排名相同或者差值为1

标签:salary,569,insert,company,力扣,into,SQL,Employee,id
From: https://blog.csdn.net/m0_59659684/article/details/143563685

相关文章

  • MySQL执行语句之后navicate一直正在执行中且无法关闭
    分析:navicate里边超过1000S基本可以断定语句已失去连接。可能原因为:1.数据量过大,语句无法执行。2.数据库资源不足。查看思路:1.查看正在执行的进程:--查询进程SELECT*frominformation_schema.PROCESSLISTWHEREcommand!='sleep'ORDERBYinfodesc;正在执行的进程中......
  • Sql(MySQL事务四大特性、事务隔离级别)
    Sql(MySQL事务四大特性、事务隔离级别)文章目录Sql(MySQL事务四大特性、事务隔离级别)1.事务的特性2.事务隔离级别2.1幻读2.2处理幻读问题2.3死锁问题2.4隔离级别相关命令1.事务的特性MySQL事务有四大特性。原子性(atomicity):一个事务必须是一个不可分割的最......
  • 今日力扣:3254. 长度为 K 的子数组的能量值 I
    给你一个长度为 n 的整数数组 nums 和一个正整数 k 。一个数组的 能量值 定义为:如果 所有 元素都是依次 连续 且 上升 的,那么能量值为 最大 的元素。否则为-1。你需要求出 nums 中所有长度为 k 的 子数组 的能量值。请你返回一个长度为 n-k+......
  • 解决mysql 的 [HY000][1356] View ‘information_schema.TABLES‘ references invalid
    同事在修改mysql用户权限时修改了关于mysql.infoschema的权限信息,导致无法访问information_schema库下的所有视图,使用数据库连接工具连接MySQL数据库时出现报错情况,使用MySQL终端登录并执行show命令同样报错。报错信息如下:ERROR1356(HY000):View'information_s......
  • 数据库----SQL
    数据库的概念数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是......
  • mysql SQLSTATE[HY000] [1045] Access denied for user
    错误解析错误代码:SQLSTATE[HY000][1045]错误信息:Accessdeniedforuser‘root’@‘localhost’(usingpassword:YES)可能的原因密码错误:尽管重置了密码,但可能在连接数据库的代码中没有更新新的密码。用户权限问题:root用户可能没有从localhost或127.0.0.1访问数据库的......
  • SQLSTATE[HY000] [1045] Access denied for user ‘root‘@‘localhost‘ (using pass
    错误解析错误代码:SQLSTATE[HY000][1045]错误信息:Accessdeniedforuser‘root’@‘localhost’(usingpassword:YES)可能的原因密码错误:提供的密码与数据库中存储的密码不匹配。用户权限问题:用户root可能没有从localhost访问数据库的权限。配置文件问题:MySQL的配置......
  • 【java】实战-力扣题库:有序数组的平方
    问题描述给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。问题分析:既然给定的是一个非递减顺序的数组我们可以使用双指针,一个指向左边,一个指向右边,比较两边平方后的大小。哪个大,就把那个数放到当前数......