LeetCode 高频 SQL 50 题(进阶版)
2023-06-05 15:04:59 3 举报
AI智能生成
登录查看完整内容
Leetcode sql
作者其他创作
大纲/内容
select customer_idfrom Customerswhere year = '2021' and revenue > 0;
1821. 寻找今年具有正收入的客户
selects.Name as 'Customers'from Customers swhere s.Id not in (select o.CustomerId from Orders o);
183. 从不订购的客户
1873. 计算特殊奖金
way1:傻瓜写法
way2:having 写法
way3:正则表达式
1398. 购买了产品 A 和产品 B 却没有购买产品 C 的顾客
way1:开窗函数
way2:子查询
1112. 每位学生的最高成绩
查询
175. 组合两个表
select s.seller_namefrom Seller s left join Orders o on s.seller_id = o.seller_id and year(o.sale_date) = '2020'where o.seller_id is nullorder by s.seller_name;
1607. 没有卖出的卖家
1407. 排名靠前的旅行者
select namefrom SalesPersonwhere sales_id not in ( select sales_id from Orders o left join Company c on o.com_id = c.com_id where c.name = 'red');
607. 销售员
1440. 计算布尔表达式的值
1212. 查询球队积分
连接
1890. 2020年最后一次登录
511. 游戏玩法分析 I
1571. 仓库经理
selectcustomer_numberfrom Ordersgroup by customer_numberorder by count(*) desclimit 1;
way2:官方解法
586. 订单最多的客户
编写一个SQL查询以计算每位员工每天在办公室花费的总时间(以分钟为单位)。 请注意,在一天之内,同一员工是可以多次进入和离开办公室的。 在办公室里一次进出所花费的时间为out_time 减去 in_time。
1741. 查找每个员工花费的总时间
way1
way2
way3
如果顾客期望的配送日期和下单日期相同,则该订单称为 「即时订单」,否则称为「计划订单」。写一条 SQL 查询语句获取即时订单所占的百分比, 保留两位小数。查询结果如下所示。
1173. 即时食物配送 I
way3:自连接
1445. 苹果和桔子
1699. 两人之间的通话次数
聚合函数
1587. 银行账户概要 II
selectemail as Emailfrom Personwhere email is not nullgroup by emailhaving count(Email) >1;
way1:having
way1:where
182. 查找重复的电子邮箱
way1:嵌套一层效率更高
way2:基本解法
way3:where
1050. 合作过至少三次的演员和导演
1511. 消费者下单频率
1693. 每天的领导和合伙人
t.program_date like '2020-06%'
t.program_date regexp '^2020-06'
and year(t.program_date) = '2020' and month(t.program_date) ='06'
and extract(YEAR_MONTH from t.program_date) ='202006'
考察10种“2020年6月”的表达
1495. 上月播放的儿童适宜电影
1501. 可以放心投资的国家
排序和分组
way1:将两个表连接的结果是这两个表的 笛卡尔乘积
way2:开窗函数
603. 连续空余座位
way1:行转列(横表转竖表)
1795. 每个产品在不同商店的价格
SELECT MIN(ABS(p1.x - p2.x)) AS shortestFROM point p1 JOIN point p2 ON p1.x != p2.x;
613. 直线上的最近距离
with aa as ( select employee_id from Employees union all select employee_id from Salaries)select employee_idfrom aa group by 1 having count(*) = 1 order by 1
way1:子查询
select employee_id from Employees where employee_id not in (select employee_id from Salaries) union all select employee_id from Salaries where employee_id not in (select employee_id from Employees) order by employee_id
way2:union all
1965. 丢失信息的雇员
SELECT DISTINCT page_id AS recommended_pageFROM LikesWHERE user_id IN ( SELECT ( CASE WHEN user1_id = 1 then user2_id WHEN user2_id = 1 then user1_id END ) AS user_id FROM Friendship WHERE user1_id = 1 OR user2_id = 1) AND page_id NOT IN ( SELECT page_id FROM Likes WHERE user_id = 1)
SELECT DISTINCT page_id AS recommended_pageFROM LikesWHERE user_id IN ( SELECT user1_id AS user_id FROM Friendship WHERE user2_id = 1 UNION ALL SELECT user2_id AS user_id FROM Friendship WHERE user1_id = 1) AND page_id NOT IN ( SELECT page_id FROM Likes WHERE user_id = 1)
1264. 页面推荐
way1:
608. 树节点
way2:自关联
534. 游戏玩法分析 III
way1:行列转换
way2:笛卡尔积
1783. 大满贯数量
select distinct a.account_idfrom LogInfo a inner join LogInfo bon a.account_id= b.account_idand a.ip_address <> b.ip_addressand a.login between b.login and b.logout
way1:自连接
a inner join b on
=
备注
1747. 应该被禁止的 Leetflex 账户
高级查询和连接
1350. 院系无效的学生
窗口函数
自连接
1303. 求团队人数
512. 游戏玩法分析 II
way1:开窗函数
way2:子查询
184. 部门工资最高的员工
1549. 每件商品的最新订单
way1:窗口函数
1532. 最近的三笔订单
1831. 每天的最大交易
子查询
1077. 项目员工 III
way1:开窗函数差值计算
1285. 找到连续区间的开始和结束数字
way1:窗口函数
way2: 多表链接
1596. 每位顾客最经常订购的商品
1709. 访问日期之间最大的空档期
SELECT DISTINCT employee_id FROM ( SELECT employee_id FROM Employees WHERE manager_id = 1 UNION ALL SELECT employee_id FROM Employees WHERE manager_id IN ( SELECT employee_id FROM Employees WHERE manager_id = 1 ) UNION ALL SELECT employee_id FROM Employees WHERE manager_id IN ( SELECT employee_id FROM Employees WHERE manager_id IN ( SELECT employee_id FROM Employees WHERE manager_id = 1 ) )) T WHERE employee_id != 1
way1:union all
SELECT e1.employee_idFROM Employees e1JOIN Employees e2 ON e1.manager_id = e2.employee_idJOIN Employees e3 ON e2.manager_id = e3.employee_idWHERE e1.employee_id != 1 AND e3.manager_id = 1
way2:join
1270. 向公司CEO汇报工作的所有人
way1:子查询写法
way2:开窗函数写法
way3:开窗函数写法
1412. 查找成绩处于中游的学生
way1:MYSQL RECURSIVE
way2:
1767. 寻找没有被执行的任务对
1225. 报告系统状态的连续日期
高级主题:窗口函数和公共表表达式(CTE)
简单:26道
中等:21道
困难:3道
题型
LeetCode 高频 SQL 50 题(进阶版)
0 条评论
回复 删除
下一页