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

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

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

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

    • 子查询

相关推荐
王八八。8 小时前
Navicat 17破解版下载安装教程 附安装激活步骤(2026 最新版)
数据库·navicat
腾讯云云开发9 小时前
腾讯云 CloudBase 登上 WAIC:我们为 Agent 重新设计了云的生产线
后端
Jelena157795857929 小时前
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
java·大数据·数据库
星栈9 小时前
从装一堆工具到看懂 Node 工程化思维:我的项目复盘记录
后端·node.js
65岁退休Coder10 小时前
LangChain v1.3.4 笔记 - 05 Agent 上下文记忆
后端
颜酱10 小时前
04 | 召回前置准备:搭好召回所需的四个数据库
前端·人工智能·后端
JaneConan10 小时前
鸿蒙 韶非 UI 系列:能力调用 startAbilityForResult,跳能力拿回参,鸿蒙能力路由入门
后端·harmonyos
晴空了无痕10 小时前
从 Go 基础到 K8s:一条可落地的 Go 服务端成长路线
开发语言·后端·golang·kubernetes
用户83562907805110 小时前
如何使用 Python 在 Excel 中添加、编辑和删除超链接
后端·python
花椒技术10 小时前
原本要 2 天的服务端冒烟前置审查,为什么 3 分半就能出报告?|QA 质量交付实践(三)
后端·ai编程·测试