SQL聚合不会产生结果

时间:2011-05-12 04:46:08

标签: mysql sql aggregate-functions

为什么这会给出一个空的结果?我正在努力获得非主管员工的最低,最高和平均水平。

SELECT MIN(salary), MAX(salary), AVG(salary)
FROM employee
WHERE ssn NOT IN
(SELECT superssn FROM employee)

员工表的一部分

SSN       SUPERSSN
--------- ---------
888665555
333445555 888665555
987654321 888665555
987987987 987654321
123456789 333445555
999887777 987654321
666884444 333445555
453453453 333445555

2 个答案:

答案 0 :(得分:2)

您需要从内部查询中排除空值。否则,外部查询将检查其中一个列表值为NULL并且该比较不返回任何内容的列表。所以,正确的查询应该是类似的。

SELECT MIN(salary), MAX(salary), AVG(salary)
FROM employee
WHERE ssn NOT IN
(SELECT superssn FROM employee where superssn IS NOT NULL)

答案 1 :(得分:2)

这就是为什么NOT EXISTS语义正确且更可靠

SELECT MIN(salary), MAX(salary), AVG(salary)
FROM employee E
WHERE NOT EXISTS (SELECT * FROM employee E2 WHERE E.ssn = E2.superssn)

由于布尔逻辑,NOT IN列表中的任何NULL总是会给出错误。你有一个NULL superssn值。