查詢每個部門薪資最低的員工完整信息。
SELECT deptno, MIN(sal) min_sal FROM emp GROUP BY deptno;

SELECT e.*
FROM emp e,
(SELECT deptno, MIN(sal) min_sal FROM emp GROUP BY deptno) s
WHERE e.deptno = s.deptno AND e.sal = s.min_sal;

SELECT * FROM emp WHERE sal IN (SELECT MIN(sal) FROM emp GROUP BY deptno);


員工 1234 屬於部門 20,但薪資等於部門 10 的最低薪資,被錯誤選中。

關聯條件 e.deptno = s.deptno 確保「部門內最低薪資」與「員工所在部門」強綁定,跨部門同薪值不會誤匹配。
| 寫法 | 語義 | 風險 |
|---|---|---|
sal IN (SELECT MIN(sal) ...) | 薪資值 ∈ 全公司所有部門最低薪資值集合 | 忽略部門維度,跨部門同值誤判 |
關聯子查詢 e.deptno = s.deptno AND e.sal = s.min_sal | 員工部門 = 統計部門 且 薪資 = 該部門最低薪資 | 嚴格綁定部門維度,語義精確 |
IN (SELECT 聚合函數 ...)。SELECT * FROM (
SELECT e.*, ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal) rn
FROM emp e
) WHERE rn = 1;
性能最優、語義清晰、天然去重(同薪取第一行)。ORDER BY sal, empno 或 LISTAGG 中體現。ORDER BY sal DESC 或 MAX(sal) 關聯子查詢。ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC) <= 3。「關聯子查詢綁定維度,IN 子查詢丟失維度」——這一認知能避開 90% 分組極值查詢的邏輯坑。