2014-12-29 3 views
0

я собирался корыто способы ограничить результаты в SQL, и я наткнулась таким образом:Ограничение результатов в SQL запросе

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

Этот запрос возвращает три младших сотрудников, но я не совсем понимаю, как этот запрос работает. Как получилось 2> = и не 2 < =? Может ли кто-нибудь пролить свет на то, что делает этот запрос? Спасибо!

+1

Есть лучшие способы получить трех младших сотрудников. Ваш вопрос о том, как это сделать или о том, почему это работает? Кроме того, какую базу данных вы используете? –

+0

Мой вопрос в том, почему это работает. Я использую postgres – Newyork111

+0

хорошо, если у вас вопрос, как работает ваш запрос, посмотрите на подзапрос. попробуйте оценить его для каждой записи и узнать, что она возвращает. Вы будете знать, как это работает. (он возвращает число сотрудников с датой рождения больше, чем дата рождения текущей записи, тогда вы сравниваете это с числом, также попробуйте переписать это в этом порядке 'подзапрос <= 2' для лучшего восприятия) –

ответ

1

Понять его, например, данные:

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. Он уверен, что он вернет empid 1,2,3 not 4.

Примечание: для получения информации о том, что существуют другие подходы для достижения этой эффективности.

+0

Вы рок! Я понял! Благодаря! Да, я знаю, что существуют лучшие решения. Но поскольку я до сих пор не знаком с SQL, я стараюсь не проживать пробелы, если сталкиваюсь с тем, чего не получаю. Большое спасибо, вы сделали это очень ясно – Newyork111

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

Дает вам количество сотрудников, которые моложе текущего сотрудника. До тех пор, пока 0, 1 или 2 человека моложе, чем текущий сотрудник, возвращается строка get.

Это дает вам, в конце концов, троих самых молодых сотрудников. На самом деле это не только даст вам сотрудников с 3 маленьких дат родовыми (может быть более 3-х человек)

Смежные вопросы