我有以下查询,该查询可为我提供所需的结果,但我无法按“ id_utilisateur”分组,这是查询:
SELECT count(distinct d.id_dossier), p.name, u.id_utilisateur, u.superior
FROM dossier AS d
LEFT JOIN action AS a
ON a.id_dossier=d.id_dossier
LEFT JOIN CD AS cd
ON cd.id_dossier=d.id_dossier
LEFT JOIN utilisateur AS u
ON u.id_utilisateur=cd.id_utilisateur
LEFT JOIN personne AS p
ON p.id_personne=u.id_personne
WHERE d.id_dossier>0
GROUP BY u.id_utilisateur,d.id_dossier
HAVING (
SELECT COUNT(a2.id_dossier)
FROM action AS a2
WHERE a2.fait=0
AND a2.commentaire=0
AND a2.id_dossier=d.id_dossier
)<1
ORDER BY d.date_creation DESC
LIMIT 500
由id_utilisateur进行的分组不起作用,我在同一行中获得同一用户的结果,我该如何解决呢?
这是我得到的结果与预期的结果
答案 0 :(得分:2)
GROUP BY
SELECT
中所有未汇总的列:
SELECT count(distinct d.id_dossier), p.name, u.id_utilisateur, u.superior
FROM . . .
WHERE . . .
GROUP BY p.name, u.id_utilisateur, u.superior
HAVING . . .
如果您明确希望每个u.id_utilisateur
包含一行,则汇总所有其他列:
SELECT count(distinct d.id_dossier),
MAX(p.name) as name, u.id_utilisateur,
MAX(u.superior) as superior
FROM . . .
WHERE . . .
GROUP BY p.name, u.id_utilisateur, u.superior
HAVING . . .
答案 1 :(得分:0)
如果您希望id_utilisateur
与众不同,则需要group by id_utilisateur
。
您的查询中有GROUP BY u.id_utilisateur,d.id_dossier
,您需要将其更改为GROUP BY u.id_utilisateur
。
如果您在查询中需要更多列,则将group by语句放入内部查询中,然后联接表。
答案 2 :(得分:0)
对于那些遇到相同问题的人,我通过将子查询放在and条件内来解决了这个问题,并删除了该特定查询的Haveing子句。