2014-12-29 2 views
0

나는 SQL의 결과를 제한하는 트로프 방법을 가고 있었고, 난 그런 방법을 통해 온 :제한 결과

SELECT name 
FROM employees e 
WHERE 2>=(SELECT COUNT(*) FROM employees e1 WHERE e1.birthdate>e.birthdate); 

이 쿼리는 세 막내 직원을 반환하지만 아주 방법이 쿼리를하지 않습니다 공장. 어떻게 2> = 2가 아닌가. < =? 누구든지이 쿼리가하는 일을 밝힐 수 있습니까? 고맙습니다!

+1

세 명의 가장 어린 직원을 얻는 더 좋은 방법이 있습니다. 이 작업을 수행하는 방법이나 위의 이유가 무엇인지에 대한 질문이 있습니까? 또한, 어떤 데이터베이스를 사용하고 있습니까? –

+0

내 질문은 이것이 왜 작동하는지에 관한 것입니다. 내가 사용하는 포스트그레스 – Newyork111

+0

글쎄, 귀하의 질문에 어떻게 쿼리가 작동하는 경우, 하위 쿼리보세요. 각 레코드에 대해 평가하고 그 레코드가 무엇을 반환하는지 확인하십시오. 어떻게 작동하는지 알 수 있습니다. (현재 기록의 생년월일보다 큰 생년월일을 가진 직원 수를 반환합니다.이 숫자를 숫자와 비교하고, 더 나은 인식을 위해 하위 순서 <= 2 '로 다시 작성하십시오) –

답변

1

는 예를 들어, 데이터와 이해 (3 명 이상 직원 수) :

employeeId birthdate 
1   12/29/2014 
2   11/20/2014 
3   01/01/2015 
4   11/19/1991 

을 지금, 각각의 하위 쿼리를 평가 :

employeeId birthdate subquery result 
1   12/29/2014 how many employees have birth date > 12/29/2014 = 1 
2   11/20/2014 how many employees have birth date > 11/20/2014 = 2 
3   01/01/2015 how many employees have birth date > 01/01/2015 = 0 
4   11/19/1991 how many employees have birth date > 11/19/1991 = 3 

이제 2>= subquery result 기준을 적용하십시오. 그것은 1,2,3가 아닌 empid를 반환 할 것입니다.

참고 :이 점을 효율적으로 달성하기위한 다른 접근법에 대한 정보가 있습니다.

+0

당신은 rock!습니다! 알 겠어! 감사! 그래, 나는 더 나은 해결책이 있다는 것을 안다. 그러나 SQL을 처음 접한 이래로 내가 얻지 못하는 것을 발견하면 나는 공백을 메우려하지 않습니다. 고마워, 너 분명히 했어. – Newyork111

1
SELECT COUNT(*) FROM employees e1 WHERE e1.birthdate>e.birthdate 

현재 직원보다 적은 수의 직원을 제공합니다. 0, 1 또는 2 명이 현재 geta가 반환 한 현재 직원보다 젊기 만하면됩니다.

이렇게하면 세 명의 막내 직원이 마지막에 있습니다. 사실 그것은 단지 당신에게 3 막내 출생 날짜와 직원을주고 않습니다