leetcode刷题 - SQL - 中等

1.  176. 第二高的薪水

筛选出第二大

查询并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null(Pandas 则返回 None) 。查询结果如下例所示。

666中等的第一题就上强度

强行解法

select max(salary) as SecondHighestSalary from Employee 
where salary!=(select max(salary) as salary from Employee);

万一是其他次序的解法,使用limit(看2.)

1.标量子查询,查询为空的时候会填充null

2.limit n,m 等价于 limit m offset n ,表示跳过开头的n行,返回接下来的m条数据。降序之后的第2条数据就是limit 1,1

SELECT( SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1, 1 ) AS SecondHighestSalary

第三题提供的思路,但是无法实现重复的最大值

-- 每个部门第一第三高
SELECT S.NAME, S.EMPLOYEE, S.SALARYFROM (SELECT D.NAME,T.NAME EMPLOYEE,T.SALARY,ROW_NUMBER() OVER(PARTITION BY T.DEPARTMENTID ORDER BY T.SALARY DESC) RNFROM EMPLOYEE TLEFT JOIN DEPARTMENT DON T.DEPARTMENTID = D.ID) SWHERE S.RN = 1 OR S.RN = 3

2. 177. 第N高的薪水

写函数

查询 Employee 表中第 n 高的工资。如果没有第 n 个最高工资,查询结果应该为 null 。

MySQL高级-自定义函数-csdn

有点玄学的函数

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGINset n=n-1;RETURN (SELECT distinct salary FROM Employee ORDER BY salary DESC LIMIT N, 1);
END

 3. 178. 分数排名

考察同3.

select score, dense_rank() over(order by score desc) as 'rank' from Scores

4. 180. 连续出现的数字

连续值

SELECT DISTINCT Num AS ConsecutiveNums FROM Logs 
WHERE (Id+1, Num) IN (SELECT * FROM Logs)
AND (Id+2, Num) IN (SELECT * FROM Logs)

5. 184. 部门工资最高的员工

最大值重复

select d.name as Department, e.name as Employee, e.salary as Salary
from Employee e left join Department d on e.departmentId = d.id
where (e.departmentId, e.salary) in (select distinct departmentId, max(salary) from Employee 
group by departmentId)

开窗函数实现

select Department, Employee, Salary from 
(select d.name Department, e.name Employee, e.salary Salary, rank() over(partition by e.departmentId order by e.salary DESC) rankA 
from Employee e left join Department d on e.departmentId = d.id) ranktbl 
where rankA = 1

SQL开窗函数(窗口函数)详解-CSDN博客

over()  一类是聚合开窗函数,一类是排序开窗函数。  

调用格式为:函数名(列名) OVER(partition by 列名 order by列名) 。

聚合函数对一组值执行计算并返回单一的值,如sum(),count(),max(),min(), avg()等

常与group by子句连用。除了 COUNT 以外,聚合函数忽略空值

想知道各个地区的前几名、各个班的前几名。这时候需要每一组返回多个值

SQL 标准允许将所有聚合函数用作开窗函数,用OVER 关键字区分开窗函数和聚合函数

开窗函数与聚合函数一样,也是对行集组进行聚合计算

row_number () over()

ROW_NUMBER() OVER(PARTITION BY T.DEPARTMENTID ORDER BY T.SALARY DESC) RN

但是这个无法取出重复的最大值

对相等的值不进行区分,其实就是行号,相等的值对应的排名不同,序号从1到n连续

rank() over():

相等的值排名相同,但若有相等的值,则序号从1到n不连续。如果有两个人都排在第3名,则没有第4名。1233567

dense_rank() over():

对相等的值排名相同,但序号从1到n连续。如果有两个人都排在第一名,1123456

ntile( n ) over():

可以看作是把有序的数据集合平均分配到指定的数量n的桶中,将桶号分配给每一行,排序对应的数字为桶号,序号从1到n连续。如果不能平均分配,则较小桶号的桶分配额外的行,并且各个桶中能放的数据条数最多相差1。1111222333444555(放三轮,1桶多一个)

6. 550. 游戏玩法分析 IV

日期计算,查询相互运算

示例 1:输入:
Activity table:
+-----------+-----------+------------+--------------+
| player_id | device_id | event_date | games_played |
+-----------+-----------+------------+--------------+
| 1         | 2         | 2016-03-01 | 5            |
| 1         | 2         | 2016-03-02 | 6            |
| 2         | 3         | 2017-06-25 | 1            |
| 3         | 1         | 2016-03-02 | 0            |
| 3         | 4         | 2018-07-03 | 5            |
+-----------+-----------+------------+--------------+
输出:
+-----------+
| fraction  |
+-----------+
| 0.33      |
+-----------+
解释:
只有 ID 为 1 的玩家在第一天登录后才重新登录,所以答案是 1/3 = 0.33
select round((select count(player_id) from Activity  -- 算出所有条件玩家数where (player_id,event_date-INTERVAL 1 day) in (select player_id,min(event_date) from Activity group by player_id))/(select count(distinct player_id) from Activity)  -- 算出所有玩家数,2) as fraction 

7. 570. 至少有5名直接下属的经理

混进来一个简单题

# Write your MySQL query statement below
select e1.name from Employee e1 left join Employee e2 on e1.id = e2.managerId
group by e1.id 
having count(*)>=5

8. 602. 好友申请 II :谁有最多的好友

with用法

# Write your MySQL query statement below
with t1 as (
select requester_id as id1,accepter_id as id2 
from RequestAccepted 
union all 
select accepter_id as id1,requester_id as id2 
from RequestAccepted
)select id1 as id,count(distinct id2) as num 
from t1 
group by 1
order by 2 desc 
limit 1

9. 608. 树节点

case

selectid,case when p_id is null then "Root"when id not in (select ifnull(p_id,'s') from Tree) then "Leaf"else "Inner"end as type
fromTree

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/171009.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app点击按钮弹出提示框-uni.showModal(OBJECT),选择确定和取消

参考文档: https://uniapp.dcloud.io/api/ui/prompt?idshowmodal 显示模态弹窗,可以只有一个确定按钮,也可以同时有确定和取消按钮。类似于一个API整合了 html 中:alert、confirm。 uni.showModal({title: 提示,content: 这是一…

Ansible优化大全

文章目录 一、关闭系统信息收集二、开启加速 Ansible 执行速度修改配置文件/etc/ansible/ansible.cfg由于该功能与sudo冲突,必须关闭 requiretty 选项方法一方法二 参考文章: https://blog.csdn.net/o0o0o0D/article/details/110998873 一、关闭系统信息…

第22章_数据库的设计规范

文章目录 范式的概念三范式范式一范式二范式三 反范式总结 范式的概念 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库&#xff…

彻底解决Win11锁屏界面黑屏或者图片不变化

问题描述 今天不知道干了啥,一顿操作后,win11的锁屏界面的图片就变成固定的了,原来是有windows聚焦的图片在自动变化的效果,现在没有了。然后就各种搜索求助,第二顿操作之后,锁屏界面彻底变成了黑色&#…

MFC 简单绘图与文本编辑

目录 一.创建单文档项目 二.消息映射机制 三.WM_PAINT消息触发 四.CVIEW类 五.设备上下文 六.资源类和资源的关系 七.画线,矩形 八.画布 九.画笔 十.画刷 十一.利用TRACE打印日志 十二.文本编程 十三.ID号 十四.菜单栏 十五.菜单命令路由 十六.工具…

sqli-labs关卡12(基于post提交的双引号闭合的字符型注入)通关思路

文章目录 前言一、回顾第十一关知识点二、靶场第十二关通关思路1、判断注入点2、爆显位个数3、爆显位位置4、爆数据库名5、爆数据库表名6、爆数据库列名7、爆数据库数据 总结 前言 此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击。注意靶场是可以练习的…

ESP32 C3 smartconfig一键配网报错

AP配网 在调试我的esp32c3的智能配网过程中,发现ap配网使用云智能App是可以正常配置的。 切记用户如果在menu菜单里使能AP配网,默认SSID名字为adh_PK值_MAC后6位。用户可以修改这个apssid的键值,但是要使用云智能app则这个名字的开头必须为ad…

MySQL基础架构详解

概述 我们学习东西,都不应该是先去了解细节,而是应该窥其全貌,这样才能从高纬度去理解问题,同样我们学习mysql也是一样的,我们应该先了解整个mysql架构,及来龙去脉,才能更好的掌握它。下面我们开…

SparkSQL之Analyzed LogicalPlan生成过程

经过AstBuilder的处理,得到了Unresolved LogicalPlan。该逻辑算子树中未被解析的有UnresolvedRelation和UnresolvedAttribute两种对象。Analyzer所起到的主要作用就是将这两种节点或表达式解析成有类型的(Typed)对象。在此过程中,…

A2Attention模型介绍

A2Attention的核心思想是首先将整个空间的关键特征收集到一个紧凑的集合中,然后自适应地将其分布到每个位置,这样后续的卷积层即使没有很大的接收域也可以感知整个空间的特征。第一级的注意力集中操作有选择地从整个空间中收集关键特征,而第二…

gpt支持json格式的数据返回(response_format: ‘json_object‘)

Api.h5.chatCreateChatCompletion({model: gpt-3.5-turbo-1106,token: sk-f4fe8b67-fcbe-46fd-8cc9-fd1dac5d6d59,messages: [{role: user,content:使用json格式返回十二生肖,包含中文名和英文名,[{id:"1", enName:"", cnName: &quo…

数据结构与算法(二)动态规划(Java)

目录 一、简介1.1 什么是动态规划?1.2 动态规划的两种形式1)自顶向下的备忘录法(记忆化搜索法)2)自底向上的动态规划3)两种方法对比 1.3 动态规划的 3 大步骤 二、小试牛刀:钢条切割2.1 题目描述…