高频 SQL 50 题(基础版)
2023-06-07 21:50:47 0 举报
AI智能生成
高频 SQL 50 题(基础版),数据分析、数据仓库手写必备
作者其他创作
大纲/内容
selectproduct_id from Products where low_fats = 'y' and recyclable ='Y'
1757. 可回收且低脂的产品
SELECT name FROM customer WHERE referee_id <> 2 OR referee_id IS NULL;
SELECT name FROM customer WHERE referee_id != 2 OR referee_id IS NULL;
584. 寻找用户推荐人
way1:or
way2:union
595. 大的国家
# Write your MySQL query statement belowselect distinct author_id as id from Views where author_id = viewer_id order by author_id
way1:DISTINCT 和 ORDER BY
1148. 文章浏览 I
# Write your MySQL query statement belowSELECT tweet_idFROM tweetsWHERE LENGTH(content) > 15;
1683. 无效的推文
查询
1378. 使用唯一标识码替换员工ID
way1:left join
1068. 产品销售分析 I
way1:left join
way2:not in
1581. 进店却未进行过交易的顾客
方法一:lag()+datediff()
方法二:笛卡尔积
方法三:TIMESTAMPDIFF()
方法四:adddate()函数
方法五:外连接+子查询+Date_ADD()函数
197. 上升的温度
way1
way2
1661. 每台机器的进程平均运行时间
577. 员工奖金
way1:自连接构建临时表
1280. 学生们参加各科测试的次数
SELECT NameFROM Employee AS t1 JOIN (SELECT ManagerId FROM Employee GROUP BY ManagerId HAVING COUNT(ManagerId) >= 5) AS t2 ON t1.Id = t2.ManagerId;
way1:使用临时表进行连接
select Name from Employeewhere Id in( select distinct ManagerId from Employee group by ManagerID having count(ManagerID)>=5)
way2:managerid中出现至少5次的是哪些(group by+having 聚合函数) in
570. 至少有5名直接下属的经理
1934. 确认率
连接
way1:使用 MOD() 函数
way2:(id % 2) = 1来确定奇数
620. 有趣的电影
1251. 平均售价
way1:avg
way2:sum/count
1075. 项目员工 I
1633. 各赛事的用户注册率
way1:
1211. 查询结果的质量和占比
1193. 每月交易 I
way1:子查询
1174. 即时食物配送 II
way1:子查询,分别确定分子分母
way2:inner join ,分别确定分子分母
way3:又学到了,配合布尔表达式,把日期变为0或1,avg就可以对日期求平均值b.event_date is not null此时已经是布尔值,b.event_date != null 则为1,为null则为0,avg是对0或1求平均值select
550. 游戏玩法分析 IV
聚合函数
2356. 每位教师所教授的科目种类的数量
1141. 查询近30天活跃用户数
1084. 销售分析III
# Write your MySQL query statement belowselect classfrom Coursesgroup by classhaving count(distinct student) >= 5
596. 超过5名学生的课
1729. 求关注者的数量
# Write your MySQL query statement belowselectmax(num) as num from (select num as numfrom MyNumbersgroup by numhaving count(num) =1) a
619. 只出现一次的最大数字
select customer_idfrom Customer cgroup by customer_id having count(distinct product_key) =(select count(distinct product_key) from Product)
思路:因为product table的产品数目固定, 所以只要 groupby customer_id 后只要他们中having count distinct product_key= product table的产品数目,相当于购买了全部的产品
1045. 买下所有产品的客户
排序和分组
way1:自连接
1731. 每位经理的下属员工数量
way1:union all
way3
way4
1789. 员工的直属部门
610. 判断三角形
way1:自关联
180. 连续出现的数字
way1:子查询
way2:union
1164. 指定日期的产品价格
way1:累加,开窗函数
way2:自关联
1204. 最后一个能进入电梯的人
way1:数据缺失 、创建临时表,关联
1907. 按分类统计薪水
高级查询和连接
# Write your MySQL query statement belowselect employee_idfrom Employeeswhere manager_id not in (select distinct employee_id from Employees)and salary < 30000order by employee_id
子主题
1978. 上级经理已离职的公司员工
方法二:使用位操作和 COALESCE()【通过】
626. 换座位
way1:union all
1341. 电影评分
way2:开窗函数、优秀的解法。
1321. 餐馆营业额变化增长
成为朋友是一个双向的过程,所以如果一个人接受了另一个人的请求,他们两个都会多拥有一个朋友。所以我们可以将 requester_id 和 accepter_id 联合起来,然后统计每个人出现的次数。
602. 好友申请 II :谁有最多的好友
官方解法
585. 2016年的投资
185. 部门工资前三高的所有员工
子查询
1667. 修复表中的名字
# Write your MySQL query statement belowselect*from Patientswhere conditions like '% DIAB1%' or conditions like 'DIAB1%'
# Write your MySQL query statement belowSELECT *FROM PATIENTSWHERE CONDITIONS REGEXP '^DIAB1|\\\\sDIAB1';
1527. 患某种疾病的患者
DELETE FROM PersonWHERE id NOT IN( SELECT id FROM ( SELECT MIN(id) as id FROM Person Group by email )t)
way1:not in
way2:自关联
196. 删除重复的电子邮箱
# Write your MySQL query statement belowselect max(salary) as SecondHighestSalary from Employee where salary < (select max(salary) as salaryfrom Employee)
way2:子查询
way3:开窗+rank
176. 第二高的薪水
way1:gruop_concat
1484. 按日期分组销售产品
way1:with as
way2:
1327. 列出指定时间段内所有的下单产品
way1:正则
1517. 查找拥有有效邮箱的用户
高级字符串函数 / 正则表达式 / 子句
简单: 33 道
中等: 16 道
困难: 1 道
题型
谓词下推
面试 on 和 where 区别
需要二刷、多刷复习的题目
LeetCode 高频 SQL 50 题(基础版)
0 条评论
回复 删除
下一页