高频SQL 50题 | 聚合


🌈 个人主页: Hygge_Code
🔥 热门专栏:从0开始学习Java | Linux学习| 计算机网络
💫 个人格言: "既然选择了远方,便不顾风雨兼程"

文章目录

  • [P570. 至少有5名直接下属的经历](#P570. 至少有5名直接下属的经历)
  • [P1934.确认率 🍂](#P1934.确认率 🍂)
  • [P620. 有趣的电影](#P620. 有趣的电影)
    • [取模 `%`](#取模 %)
  • [P1251. 平均售价](#P1251. 平均售价)
  • [P1075. 项目员工 I](#P1075. 项目员工 I)
  • [P1533. 各赛事的用户注册率 🍂](#P1533. 各赛事的用户注册率 🍂)

P570. 至少有5名直接下属的经历

对应的SQL语句:

P1934.确认率 🍂


对应的SQL语句:

**解法一:**使用 SUM / COUNT

**解法二:**使用VAG

以下是我一开始时写的SQL语句(存在很大的问题):

sql 复制代码
SELECT 
    S.user_id,
    ROUND(COUNT(action = 'confirmed') / COUNT(C.user_id),2) AS confirmation_rate 
FROM
    Signups S
LEFT JOIN
    Confirmations C
ON
    S.user_id = C.user_id
GROUP BY
    S.user_id
  • 问题1:COUNT(action = 'confirmed') 无法正确统计确认次数

    • COUNT() 函数的逻辑是统计括号内「非 NULL 的行数」** ,而非「统计条件为 TRUE 的行数」**:****
      • 当 action = 'confirmed' 为 TRUE(满足确认)→ COUNT 算 1;
      • 当 action = 'confirmed' 为 FALSE(如 timeout/unconfirmed)→ COUNT 仍算 1(FALSE 不是 NULL);
    • 最终 COUNT(action = 'confirmed') 会等于 COUNT(C.user_id)(总操作次数),完全无法区分"确认"和"非确认"操作。
  • 问题2:MySQL 中「数值 ÷ 0」会直接返回 NULL

    • 若用户在 Confirmations 中无记录 → C.user_id 为 NULL → COUNT(C.user_id) = 0,MySQL 中「数值 ÷ 0」会直接返回 NULL

P620. 有趣的电影

对应的SQL语句:

取模 %

P1251. 平均售价


对应的SQL语句:

P1075. 项目员工 I


对应的SQL语句:

P1533. 各赛事的用户注册率 🍂

错误语句:

复制代码
SELECT 
    R.contest_id,
    ROUND( COUNT(R.user_id) / (SELECT COUNT(*) FROM Users) * 100, 2 )  AS percentage 
FROM
    Users U
LEFT JOIN
    Register R
ON 
    U.user_id = R.user_id
GROUP BY
    contest_id
ORDER BY
    percentage DESC, contest_id ASC

错误原因: 忽略了通过GROUP BY contest_id 分组后,若有User没有任何分组,则其会留下一个NULL值,而这些NULL值就会形成一个分组,后续也会参与进计算里:COUNT(NULL) = 0

解决方法:加上WHERE contest_id IS NOT NULL

对应的SQL语句:


如果我的内容对你有帮助,请 点赞 , 评论 , 收藏 。创作不易,大家的支持就是我坚持下去的动力!

相关推荐
钝挫力PROGRAMER13 小时前
开发踩坑记:MyBatis selectKey、空 SQL
数据库·sql·mybatis
JosieBook13 小时前
【数据库】MySQL 实战精通系列 · 第6篇:InnoDB 存储引擎、日志与崩溃恢复
数据库·mysql
杨云龙UP14 小时前
TDengine 3.4.2.8 Community 三节点三副本生产集群部署实战(DNode/MNode/taosAdapter/Explorer)
大数据·linux·运维·数据库·tdengine·时序库
梦帮科技14 小时前
领域认知知识库图谱注入:从双式记账图网络到高质量问答对自动化合成流水线
运维·网络·数据库·人工智能·矩阵·架构·自动化
Long long ago.14 小时前
vastbase数据库运行sql宕机重启解决
数据库·sql
SelectDB技术团队15 小时前
一条日志两套引擎的账:把 Elasticsearch 检索与分析合并到同一份数据的落地写法
大数据·数据库·elasticsearch·搜索引擎·全文检索·日志·apache doris
Interview Aid11215 小时前
Google SWE Intern Interview Process:OA、Coding 与面试流程详解
面试·职场和发展
数据库百宝箱15 小时前
rum&gin索引对比
java·数据库·gin
wefg116 小时前
【Redis】初识 Redis
数据库·redis·缓存
怕浪猫16 小时前
2026年金九银十,我面了22个前端
前端·javascript·面试