分组并具有MYSQL

时间:2018-12-18 11:13:08

标签: mysql sql

我有以下查询,该查询可为我提供所需的结果,但我无法按“ 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进行的分组不起作用,我在同一行中获得同一用户的结果,我该如何解决呢?

这是我得到的结果与预期的结果

enter image description here

3 个答案:

答案 0 :(得分:2)

{p> 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子句。