2015-03-16 2 views
0

Я прокручивал различные примеры, но, похоже, не получил правильного ответа. То, что я пытаюсь получить здесь, состоит в том, чтобы показать: staffID, name from Table Staff всего нет. задач, которые персонал участвует в от StaffWorksInTask (только с персоналом, который участвует с наибольшим количеством задач)sql: показать только максимальное количество (php)

штаба: staffID, имя

StaffWorksInTask: staffID, TaskId, ProjectID

Что Я сделал, как первый шаг должен был пренебречь фильтрующую часть:

SELECT COUNT(W.staffID), S.staffID, S.name 
FROM Staff S, StaffWorksInTask W 
WHERE S.staffID = W.staffID 
GROUP BY W.staffID 

Но теперь я просто полностью застрял с условием, что может сделать список только показать сотрудникам большинства задач, связанных с (так что, другой персонал не показан). Пожалуйста, помогите !! Очень признателен!!

+1

Общее правило GROUP BY гласит: «Если Предложение GROUP BY указано, каждая ссылка столбца в списке SELECT должна либо идентифицировать столбец группировки, либо быть аргументом функции набора. " Вы делаете обратное ... – jarlh

ответ

1

Вы должны ограничить результата

SELECT COUNT(W.staffID) as total, S.staffID, S.name FROM Staff S, StaffWorksInTask WHERE S.staffID = W.staffID GROUP BY S.name,S.staffID ORDER BY total DESC LIMIT 1

+0

привет ... проблема не в том, что она не работает ... она работает нормально, но мне нужно получить ее так, чтобы был показан только один штат с наибольшим количеством задач, спасибо .. –

+0

привет Jonny B, его исправлено согласно вашему требованию –

0

Как говорит @jarlh, у вас есть своя группировка назад.

SELECT TOP 1 COUNT(W.staffID) as c, S.staffID, S.name 
FROM Staff S, StaffWorksInTask W 
WHERE S.staffID = W.staffID 
GROUP BY S.staffID, S.name 
ORDER BY c DESC 

Точный синтаксис может отличаться - вы не указали, с какой базой данных вы работаете.

+0

привет ... проблема не в том, что она не работает ... она работает нормально, но мне нужно получить ее так, чтобы был показан только один штат с наибольшим количеством задач , спасибо ... –

1

Насколько я понимаю, вы хотите видеть только один, верхний результат?

Вы могли бы сделать что-то вроде:

SELECT COUNT(W.staffID) as counter, S.staffID, S.name 
FROM Staff S, StaffWorksInTask W 
WHERE S.staffID = W.staffID 
GROUP BY S.staffID 
ORDER BY counter DESC 
LIMIT 0, 1 

Это покажет только один сотрудник - тот, кто имеет наибольшее количество задач

ORDER BY положение отсортированные результаты в порядке убывания по количеству задач,

LIMIT статья гарантирует, что вы видите только 1 результат (начиная с строки 0)