关于sql面试积累

1.找出所有"每一门课成绩都 > 80"的学生(即该学生所有课程成绩均 > 80,只要有一门 ≤ 80 就不算)。

复制代码
SELECT student
FROM t1
GROUP BY student
HAVING MIN(score) > 80;

重要的知识点

HAVING关键字

HAVING 最常见的用法是跟在 GROUP BY 之后,对分组后的聚合结果再做过滤,但它也可以在没有 GROUP BY 的情况下单独使用,只要查询里存在聚合函数即可。如果既没有 GROUP BY,也没有聚合函数,直接使用 HAVING 会报错。

复制代码
SELECT student
FROM t1
GROUP BY student
HAVING MIN(score) > 80;

有GROUP BY时只看那些 组的聚合结果满足条件 的组。

复制代码
SELECT COUNT(*) AS total_rows
FROM t1
HAVING COUNT(*) > 10;

无GROUP BY时整张表被视为"一个大组",HAVING 对这个聚合结果进行筛选

常见关键字的执行顺序

  1. FROM -- 组装数据源(表、视图、子查询、JOIN)
  2. ON -- JOIN 条件过滤
  3. JOIN -- 生成中间结果集
  4. WHERE -- 对行级数据进行过滤
  5. GROUP BY -- 分组
  6. HAVING -- 对分组后的聚合结果再过滤
  7. SELECT -- 计算列表达式、去重(DISTINCT)
  8. ORDER BY -- 排序
  9. LIMIT / OFFSET-- 截取行(MySQL/PG 语法,SQL Server 用 TOP/FETCH)

"从哪来 → 先过滤行 → 再分组 → 再过滤组 → 再计算列 → 再排序 → 再分页"

对应:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

复制代码
SELECT dept, AVG(salary) AS avg_s
FROM   emp
WHERE  hire_date >= '2020-01-01'
GROUP  BY dept
HAVING AVG(salary) > 8000
ORDER  BY avg_s DESC
LIMIT  5;
相关推荐
Mr.Daozhi1 分钟前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具
小程故事多_807 分钟前
Claude Code自定义workflow skills用法
数据库·人工智能·智能体
大鹏说大话7 分钟前
SQL 排序与分组实战:解决“分组后取最新数据“
android·java·数据库
夏贰四1 小时前
数据建模工具如何筑牢数据根基?数据建模工具怎样落实标准体系?
数据库·数学建模·数据建模工具
程序猿阿伟2 小时前
《一套完整方法论:搞定图形应用的Docker镜像优化》
数据库·docker·容器
二等饼干~za8986682 小时前
geo优化源码开发搭建技术分享
大数据·网络·数据库·人工智能·音视频
数据库小学妹2 小时前
HTAP混合负载架构:如何用一个数据库同时搞定交易和分析
数据库·经验分享·架构·dba
wuxinyan1232 小时前
工业级大模型学习之路029:解决双智能体调用数据库报错问题
数据库·人工智能·python·学习·智能体
Elastic 中国社区官方博客3 小时前
Elastic 线下 Meetup 将于 2026 年 7 月 26 号下午在深圳举行
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索