【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
    • IFNULLNULL 替换为 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 ... 确实可以用于字符串(VARCHARCHAR 等)类型的比较 ,包括日期字符串(如 "2019-07-01"),前提是这些字符串具有可排序的格式 (比如 ISO 8601 格式的 YYYY-MM-DD

** 多表查询**

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

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

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

  • 分类

    • 连接查询

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

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

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

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

    • 子查询

相关推荐
BingoGo1 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack1 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
Victor3561 小时前
MongoDB(18)如何向MongoDB集合中插入文档?
后端
Victor3562 小时前
MongoDB(19)如何查询MongoDB集合中的文档?
后端
点光15 小时前
使用Sentinel作为Spring Boot应用限流组件
后端
不要秃头啊16 小时前
别再谈提效了:AI 时代的开发范式本质变了
前端·后端·程序员
有志17 小时前
Java 项目添加慢 SQL 查询工具实践
后端
山佳的山17 小时前
KingbaseES 共享锁(SHARE)与排他锁(EXCLUSIVE)详解及测试复现
后端
Leo89917 小时前
rust 从零单排 之 一战到底
后端
程序员清风18 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试