2014-10-10 4 views
0

У меня таблицы rozpis_riesitelov, который содержит столбцы:
id_rozpisu_riesit, id_zam, id_projektu, id_ulohy.MySQL MAX из графа запроса

Я сделал запрос:

select id_zam, id_ulohy, count(*) as counted 
from rozpis_riesitelov 
group by id_zam 
having id_ulohy in (1,2,8) 

, который показывает мне идентификатор сотрудника (id_zam) и сколько раз он был в проекте (id_ulohy является irrevelant, но я должен был выбрать его из having beacuse пункта). Он показывает мне всех в db, но я ищу сотрудника с идентификатором 4, который находится в 6 проектах (да, я мог бы сделать заказ, но я хочу увидеть max). Когда я делаю максимум этого запроса, как это:

select max(counted) 
from (select id_zam, id_ulohy, count(id_zam) as counted 
     from rozpis_riesitelov 
     group by id_zam 
     having id_ulohy in (1,2,8)) as riesitel 

, который показывает мне номер 149 вместо 6.

Поэтому в основном мне нужно только найти сотрудника, который происходит в большинстве проектов.

ответ

1

Что не так с сортировкой по значению COUNT() и ограничивает один результат?

SELECT `id_zam`, 
     `id_ulohy`, 
     COUNT(*) AS `counted` 
FROM `rozpis_riesitelov ` 
WHERE `id_ulohy` IN (1, 2, 8) 
GROUP BY `id_zam` 
ORDER BY `counted` DESC 
LIMIT 1 
+0

Спасибо, не вещь об этом. Ограничение результата - это ответ, который я искал. –

0

Не уверен, что именно то, что вы пытаетесь сделать, но использовать только HAVING для фильтрации вашего агрегата, как это:

HAVING COUNT(*) > 1 

вы должны быть в состоянии переместить условие в ИНЕКЕ и получить верный макс. возвращенный:

select max(counted) 
from (select id_zam, count(id_zam) as counted 
     from rozpis_riesitelov  
     where id_ulohy in (1,2,8) 
group by id_zam) as riesitel 
Смежные вопросы