【SQL题解】力扣高频 SQL 50题|DAY1

SQL刷题记录

最近期末周在复习数据库概述,顺便练练力扣上的sql题目

以下皆出自力扣高频SQL50题

25.12.20

1757

1757. 可回收且低脂的产品

简单查询,"又"用"and"连接

sql 复制代码
select product_id 
from Products 
where low_fats = 'Y' and recyclable = 'Y'

584

584. 寻找用户推荐人

也是简单查询,"和"用"or"连接

sql 复制代码
select name 
from Customer 
where referee_id != 2 or referee_id is null;

注:id != 2不包括idnull

因为 :在 SQL 中,任何与 NULL 的比较(包括 =, !=, <, >, <> 等)结果都是 UNKNOWN(既不是 TRUE 也不是 FALSE ,而 WHERE 子句只保留结果为 TRUE 的行

620

620. 有趣的电影

聚合函数+排序

  • 求id为奇数:id%2 = 1
  • 按rating降序排序:order by rating desc
sql 复制代码
select * 
from cinema 
where description != 'boring' and id%2 = 1 
order by rating desc;

570

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

连接

两种方法

1.子查询

sql 复制代码
select a.name 
from Employee a 
where (select count(b.id) 
       from Employee b 
       where b.managerId = a.id) >= 5;

注:

COUNT() 不能直接包裹一个子查询作为参数
COUNT() 是一个聚合函数,它的参数应该是:

  • 列名(如 COUNT(b.id)
  • 表达式(如 COUNT(*)
  • 或在子查询中使用(但不是这样用)

2.分组查询

sql 复制代码
select a.name 
from Employee a 
join Employee b on b.managerId = a.id 
group by a.id 
having count(a.id) >= 5;

法二比法一更省时,因为:

方法 执行模型 类比
方法二(JOIN + GROUP BY) 基于集合(Set-based) 一次性把所有数据"摊开",分组统计,一次完成
方法一(相关子查询) 逐行循环(Row-by-row / N+1) 对主表每一行,都去查一遍子表

1193

1193. 每月交易 I

聚合函数

sql 复制代码
select DATE_FORMAT(trans_date,'%Y-%m') as month,country,
count(*) as trans_count,
count(if(state = 'approved',1,null)) as approved_count,
sum(amount) as trans_total_amount,
sum(if(state = 'approved',amount,0)) as approved_total_amount
from Transactions
group by month,country;
  1. 查找每个月和每个国家:

    先把年月日转换为年月

    DATE_FORMAT(trans_date, '%Y-%m')

    MySQL 中用于格式化日期/时间的函数,它的作用是:

    trans_date 字段的值转换为 '年-月' 格式的字符串,例如 '2025-12'

    再在sql语句随后加上group by mouth,country进行分组

  2. 查找总事务数:

    count(*)再起个别名trans_count

  3. 查找总金额数:

    SUM(amount)再起个别名trans_total_amount

  4. 查找已批准的事务数:

    count(IF(state = 'approved', 1, NULL)) AS approved_count

    count只记录不是null的值,所以如果state不是approved,就置为null即可

  5. 查找已批准的事物的总金额:

    sum(IF(state = 'approved', amount, 0)) AS approved_total_amount

    已批准就累加amount

剩下的明后天继续写

相关推荐
ruxshui19 小时前
Python多线程环境下连接对象的线程安全管理规范
开发语言·数据库·python·sql
Mr_Xuhhh19 小时前
MySQL数据表操作全解析:从创建到管理
数据库·sql·oracle
阳光九叶草LXGZXJ19 小时前
达梦数据库-学习-50-分区表指定分区清理空洞率(交换分区方式)
linux·运维·数据库·sql·学习
Apple_羊先森20 小时前
ORACLE数据库巡检SQL脚本--4、检查锁阻塞
数据库·sql·oracle
好好研究20 小时前
总结SSM设置欢迎页的方式
xml·java·后端·mvc
小马爱打代码20 小时前
Spring Boot:第三方 API 调用的企业级容错设计
java·spring boot·后端
麦聪聊数据20 小时前
利用SQL2API模式重构微服务中的数据查询层
数据库·sql·低代码·微服务·架构
Aloudata21 小时前
数据工程实践:智能制造企业如何通过NoETL指标平台为数据资产“瘦身”,实现TCO最优?
sql·数据分析·etl·指标平台
csdn2015_1 天前
springboot task
java·spring boot·后端
czlczl200209251 天前
Spring Boot :如何高性能地在 Filter 中获取响应体(Response Body)
java·spring boot·后端