关于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;
相关推荐
2401_846339564 分钟前
Vue 3 中集成 Three.js 场景的完整实现指南
jvm·数据库·python
日取其半万世不竭11 分钟前
Excalidraw 自建部署指南:白板协作工具完全私有化
服务器·网络·数据库
这个DBA有点耶11 分钟前
联合索引的顺序:写错等于白建(最左前缀+范围条件+覆盖索引详解)
数据库·代码规范
2301_7756398920 分钟前
Golang怎么写TODO待办应用_Golang TODO应用教程【深入】
jvm·数据库·python
胖头鱼的鱼缸(尹海文)22 分钟前
数据库管理-第423期 Oracle AI DB 23.26.2新特性一览(20260504)
数据库·人工智能·oracle
iuvtsrt28 分钟前
WordPress 分页失效的常见原因与正确实现方案
jvm·数据库·python
木井巳30 分钟前
【MySQL数据库】数据库操作及数据类型
数据库·mysql·adb
阿维的博客日记32 分钟前
Redis 和 Caffeine 构建的多级缓存,如何保持数据一致性?
数据库·redis·缓存
爱莉希雅&&&34 分钟前
MySQL MGR + MySQL Router 高可用集群完整笔记(含手动配置 + Shell 接管双路线)
linux·数据库·笔记·mysql·mysqlrouter·mysqlshell
逸Y 仙X1 小时前
文章二十四:Elasticsearch查询排序应用实战e
java·大数据·数据库·elasticsearch·搜索引擎·全文检索