【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交集部分数据

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

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

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

    • 子查询

相关推荐
松涛和鸣2 小时前
DAY38 TCP Network Programming
linux·网络·数据库·网络协议·tcp/ip·算法
ss2732 小时前
ThreadPoolExecutor七大核心参数:从源码看线程池的设计
java·数据库·算法
+VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue健康茶饮销售管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
陌路202 小时前
redis的哨兵模式
数据库·redis·缓存
ohoy2 小时前
mysql数据存在则更新、不存在插入
数据库·mysql
陈橘又青2 小时前
vLLM-Ascend推理部署与性能调优深度实战指南:架构解析、环境搭建与核心配置
人工智能·后端·ai·架构·restful·数据·vllm
ChineHe2 小时前
Gin框架基础篇004_中间件的使用与机制详解
后端·golang·gin
LYFlied2 小时前
【每日算法】LeetCode 279. 完全平方数(动态规划)
前端·算法·leetcode·面试·动态规划