2011-11-27 3 views
1

SQL, Employee_Details 테이블에 이름, 나이 및 급여라는 세 개의 열이 있습니다. 나는이 쿼리를 통해이 같은 테이블에서 가장 높은 급여를 선택했습니다.SQL 쿼리 이해에 도움이 필요합니다.

SELECT * 
FROM Employee_Details e 
WHERE 0 = (
    SELECT count(DISTINCT Salary) 
    FROM Employee_Details 
    WHERE Salary > e.Salary 
) 

나는 무엇을 '0'의미에 대해 아무 생각이 없습니다. 아무도 내게 아이디어를주지 못해.

답변

1

그것은 내부 SELECT 쿼리에서 Employee_Details 테이블에서 카운트가 0이어야 말한다 다만 조건이

수행하는 방법 (아무도 외부 SELECT에서 선택한 직원보다 더 높은 급여를 가질 수)입니다 단지 당신이 무슨 말을 하려는지 나에게 많은 명확하게 보인다 -

이 같은 결과를 생성한다
SELECT (columns) 
FROM dbo.Employee_Details e 
WHERE e.Salary = (SELECT MAX(Salary) FROM dbo.Employee_Details) 

은 : 그것은이 방법은 아마 이런 식으로 뭔가를 사용하는 것입니다 ..... 나에게 조금 이상한 것 같다 달성하기. 급여의 수가 조회에 SELECT TOP 1 WITH TIES * FROM Employee_Details e ORDER BY Salary DESC로 (T-SQL 언어에서) 작성할 수 0

0

테이블 Employee_details에서 모두 가져옵니다. 급여의 고유 값 수가 Salary 값이 e 인 경우 0이됩니다 (즉, Salary이 더 큰 행이 없음).

0

입니다

+0

아직 그 논리를 이해할 수 없습니다. 가장 높은 급여를 어떻게 회수합니까? 관련된 논리를 이해하도록 도와주세요. – RAHUL

+0

'Employee_Details'의 각 행에 대해 전체 테이블을 다시 스캔하지만 이번에는 바깥 쪽 행보다 'Salary'가 많은 행만 계산됩니다. 이 계수의 결과가 0이면 바깥 쪽 행이 선택됩니다. 하위 쿼리는 'Employee_Details'에 더 큰 Salary - 정의 상 최대 행을 의미하는 행이 없으면 0을 반환합니다. – MagnatLU

관련 문제