关于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;
相关推荐
程序员小白条6 小时前
0经验如何找实习?
java·开发语言·数据结构·数据库·链表
liulilittle6 小时前
C++ 浮点数封装。
linux·服务器·开发语言·前端·网络·数据库·c++
郭涤生6 小时前
QT 架构笔记
java·数据库·系统架构
韩立学长6 小时前
基于Springboot流浪动物领养网站0kh2iyb4(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
DBA小马哥6 小时前
Oracle迁移到金仓数据库:完整迁移步骤与兼容性优化实战
数据库·oracle·国产化平替
@nengdoudou6 小时前
KStudio 客户端无法访问 KES 数据库服务器的指定 IP / 端口
数据库
宋军涛7 小时前
记一次Sqlserver数据库存储过程调用导致的连接池耗尽事件
数据库
前端小臻8 小时前
MySQL 错误 1005 (errno: 150) 深度解析与解决方案
数据库·mysql
魔镜前的帅比8 小时前
向量数据库原理
数据库·人工智能
Dev7z8 小时前
在MySQL里创建数据库
android·数据库·mysql