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

SQL刷题记录

今天上午考完了数据库概论,以后会继续更完力扣上的

以下皆出自力扣高频SQL50题

文章目录

25.12.24

577

577. 员工奖金

sql 复制代码
select name, bonus
from Employee left join Bonus
on Employee.EmpId = Bonus.EmpId
where bonus is null or bonus < 1000;

先进行左外查询,Employee为左表

然后筛选出bonus为空或者小于1000的

1934

1934. 确认率

sql 复制代码
# Write your MySQL query statement below
SELECT
    s.user_id,
    ROUND(IFNULL(AVG(c.action='confirmed'), 0), 2) AS confirmation_rate
FROM
    Signups AS s
LEFT JOIN
    Confirmations AS c
ON
    s.user_id = c.user_id
GROUP BY
    s.user_id;

确认率 是 'confirmed' 消息的数量除以请求的确认消息的总数

  1. c.action = 'confirmed'
    • 在 MySQL 中,布尔表达式会返回 1(真)或 0(假)
    • 所以当 action 是 'confirmed' 时,结果为 1;否则为 0
  2. AVG(c.action='confirmed')
    • 对每个用户的所有确认记录,计算 'confirmed' 的平均值
    • 例如:如果有 3 条记录,其中 2 条是 'confirmed',则 AVG = (1+1+0)/3 = 0.666...
  3. IFNULL(..., 0)
    • 如果某个用户在 Confirmations 表中没有任何记录 ,那么 AVG(...) 的结果会是 NULL
    • IFNULL 将 NULL 替换为 0,表示确认率为 0。
  4. ROUND(..., 2)
    • 将结果四舍五入保留 2 位小数

1251

1251. 平均售价

查找每种产品的平均售价,average_price 应该 四舍五入到小数点后两位。如果产品没有任何售出,则假设其平均售价为 0。

sql 复制代码
select p.product_id, 
ifnull( round(sum(price*units)/sum(units),2) ,0) 
as average_price 
from prices p 
left join UnitsSold u 
on p.product_id=u.product_id 
and purchase_date between start_date and end_date 
group by p.product_id;

1075

1075. 项目员工 I

sql 复制代码
SELECT
    a.project_id,
    ROUND(AVG(b.experience_years), 2) AS average_years
FROM
    Project a
JOIN
    Employee b
ON
    a.employee_id = b.employee_id
GROUP BY
    a.project_id;

以id相同为条件连接两个表,按照id分组,分别计算平均年限

1141

1141. 查询近30天活跃用户数

sql 复制代码
SELECT 
    activity_date as day, count(DISTINCT user_id) AS active_users
FROM
    Activity
WHERE activity_date BETWEEN 
    "2019-06-28" AND "2019-07-27"
GROUP BY
    activity_date;

在 MySQL 中,BETWEEN ... AND ... 确实可以用于字符串(VARCHAR、CHAR 等)类型的比较 ,包括日期字符串(如 "2019-07-01"),前提是这些字符串具有可排序的格式 (比如 ISO 8601 格式的 YYYY-MM-DD)

** 多表查询**

  • 概述:从多张表中查询数据

  • 笛卡尔积:笛卡尔积是指在数学中,两个集合A和B的所有组合情况(在多表查询时需要消除无用的笛卡尔积)

    select * from emp,dept where emp.dept_id = dept.id;

  • 分类

    • 连接查询

      内连接:相当于查询A、B交集部分数据

      外连接:左外连接:查询左表所有数据以及两张表交集部分数据

      ​ 右外连接:查询右表所有数据,以及两张表交集部分数据

      自连接:当前表与自身的连接查询,自连接必须使用表别名

    • 子查询

相关推荐
龙腾AI白云3 小时前
AI微调技术:让通用大模型精准适配垂直行业
数据库·人工智能·机器学习·flask·scikit-learn
SelectDB3 小时前
NESTED 怎么搜 VARIANT 里的嵌套数组:一份可直接复制的统一引擎实战笔记
大数据·数据库·数据分析
旖旎夜光3 小时前
LeetCode 137 : 只出现一次的数字 II(位运算) —— 题解
c++·笔记·学习·算法·leetcode·力控
hasty3 小时前
返回一个文件,为何越过整个目录?Khoj 静态资源路由的安全边界
数据库·安全
余槐i3 小时前
rollbackFor 不设置,Checked 异常不回滚:Spring 默认规则与两行修复的取舍
java·spring boot·后端·spring·事务管理
王老师青少年编程3 小时前
2026年9月GESP真题及题解(C++七级):必经之路
c++·题解·真题·gesp·七级·2026年9月·必经之路
孙启超3 小时前
【AI开发之Rust】第 17 课:项目总览与核心架构 —— AI 助手 Rust 核心从 0 到 1
开发语言·后端·rust
程序员-Benothing3 小时前
Linux内核与模块管理:uname、lsmod、modprobe、sysct
linux·运维·数据库
cmes_love4 小时前
期货期权L2五档行情、逐笔成交、分钟日线数据字段速览
数据库
EatFan4 小时前
JunoYi 框架实践:Spring Boot 项目为什么拆成 framework、module、server 三层?
java·spring boot·后端·framework·module·模块化·junoyi