2011-05-12 5 views
1

왜이 결과가 비어 있습니까? 감독자가 아닌 직원 세트의 최소, 최대 및 평균을 얻으려고합니다. 직원 테이블의SQL 집계 결과가 생성되지 않음

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 
+0

당신의 코드를 선택하고'{} '을 누르면 –

답변

2

당신은 내부 쿼리에서 null을 배제 할 필요가있다. 그렇지 않으면 외부 쿼리는 목록 값 중 하나가 NULL이고 비교 결과를 반환하지 않는 목록에 대해 검사합니다. 올바른 쿼리는 다음과 같아야합니다. NOT EXISTS 이유는

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

을주고'형식을 선택할 때 (선택) (ssn) 직원을 선택하십시오. –

2

항상 부울 논리 거짓 감사를 줄 것이다 목록에서 NOT에서

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

모든 NULL 의미 정확하고 더 신뢰할 수있다. 당신은 superssn 값이 NULL입니다.

관련 문제