2016-01-07 2 views
1

У меня есть две таблицы Client и Instructor.SQL Server: идентификатор родителя с наименьшим количеством детей

Client таблица:

id_client|name_client|FK_instructor 
---------+-----------+------------ 
    1 | Clinton | 2 
    2 | Gates` | 1 
    3 | Bush  | 1 
    4 | Clinton | 2 
    5 | Obama  | 1 
    6 | Jack  | 3 

инструктор стол:

id_instructor|name_instructor 
-------------+--------------- 
     1  | Sara 
     2  | Sam    
     3  | Dean 
     4  | Julie 
     5  | Jake 

Я хочу, чтобы выбрать 3 инструкторов, которые имеют наименьшее количество клиентов, связанных.

Заранее спасибо.

+0

Пробовал что-нибудь? – Coderchu

+2

Какая СУБД для этого? – Phil

+1

Звучит как работа для группы с помощью соединения, порядка и предела. –

ответ

3

Теперь, когда вы упомянули, что используете SQL Server, помимо GROUP BY и ORDER BY вам нужен TOP(3) на SELECT.

SELECT TOP(3) i.id_instructor, i.name_instructor 
FROM  Instructor i 
JOIN  Client c ON c.FK_instructor = i.id_instructor 
GROUP BY i.id_instructor, i.name_instructor 
ORDER BY COUNT(*) --Implicitly ascending 

Обратите внимание, что я добавил инструктор идентификатор в группу по сравнению с другим ответом в случае, если более чем один инструктор имеет то же имя.

+1

Спасибо, это именно то, что мне нужно –

1

Если вы работаете с Netezza, вы можете попробовать:

SELECT name_instructor, COUNT(id_client) 
FROM instructor_table 
    JOIN client_table on instructor_table.id_instructor = client_table.FK_instructor 
GROUP BY name_instructor 
ORDER BY COUNT(id_client) DESC 
LIMIT 3 

Существует большая документация Netezza здесь: http://www-304.ibm.com/support/knowledgecenter/SSULQD_7.2.0/com.ibm.nz.dbu.doc/c_dbuser_sql_grammar.html

Есть также SQL учебники здесь: http://www.w3schools.com/sql/

+1

Это возвращает инструкторов с _highest_ количеством клиентов, а не с _least_ количеством клиентов (и вы должны указать, для какой СУБД это, 'LIMIT' является нестандартным SQL) –

+1

Вопрос: слишком расплывчато, чтобы ответить. Вы можете добавить, что это решение для MySQL. Это не будет выполняться, если db является SQLServer. Также 'DESC' ошибочно. – Timeout

+1

Спасибо за ваш ответ, действительно, я использую SQL Server, и LIMIT не работает. и этот запрос дал мне список инструкторов с количеством клиентов, которые у них есть, но я хочу, чтобы результат был всего лишь тремя именами инструкторов с наименьшим количеством клиентов. Например, если у нас есть 10 инструкторов, и у каждого из них есть несколько клиентов, я хочу, чтобы только у 3 из них было наименьшее количество клиентов. –

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