我有 table rozpis_riesitelov ,其中包含列:
id_rozpisu_riesit,id_zam,id_projektu,id_ulohy。
我提出了查询:
select id_zam, id_ulohy, count(*) as counted
from rozpis_riesitelov
group by id_zam
having id_ulohy in (1,2,8)
显示了我的员工ID(id_zam
)以及他在项目中的次数(id_ulohy
是无效的,但我不得不选择它having
子句。它向我展示了数据库中的每个人,但我正在寻找ID为4的6个项目的员工(是的,我可以按顺序排序,但我希望看到最大值)。当我像这样做这个查询的最大值时:
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。
所以基本上我只需要找到大多数项目中出现的员工。
答案 0 :(得分: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
答案 1 :(得分:0)
不确定您要完成的是什么,但您只使用HAVING过滤您的聚合,如下所示:
HAVING COUNT(*) > 1
您应该能够将条件移动到WHERE子句并获得正确的最大返回值:
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