Mysql 如何在具有限制和偏移的结果上使用GROUP BY?
我使用MySQL 5.6,使用Mysql 如何在具有限制和偏移的结果上使用GROUP BY?,mysql,group-by,limit,offset,Mysql,Group By,Limit,Offset,我使用MySQL 5.6,使用groupby和LIMIT+OFFEST查询结果时遇到问题。这些结果与没有偏移量的结果不一致。为什么?解决办法是什么 此查询(无偏移量和无分组依据)给了我10个结果: SELECT sp.couleur, sp.nom, d.degre_urgence FROM demande_interservices AS d LEFT JOIN demande_interservices_a_valider AS dv ON d.id = dv.demande_inter
groupby
和LIMIT+OFFEST
查询结果时遇到问题。这些结果与没有偏移量的结果不一致。为什么?解决办法是什么
此查询(无偏移量
和无分组依据
)给了我10个结果:
SELECT sp.couleur, sp.nom, d.degre_urgence
FROM demande_interservices AS d
LEFT JOIN demande_interservices_a_valider AS dv ON d.id = dv.demande_interservices_id
LEFT JOIN demande_interservices_affectee_a_sous_pole AS d_aff ON d.id = d_aff.demande_interservices_id
LEFT JOIN sous_pole AS sp ON d_aff.sous_pole_id = sp.id
WHERE d.pole_sollicite_id = (SELECT pole_id FROM utilisateur WHERE id = 38)
AND (d.statut_id = 1 OR d.statut_id = 2)
AND dv.demande_interservices_id IS NULL
ORDER BY d.degre_urgence DESC
LIMIT 10
结果:
couleur degre_urgence nom
_______________________________
#cd423a 5 Communication
#cd423a 5 Communication
#ff3ebb 5 Assistante DGS
#925210 5 Police Urbanisme
#000000 5 informatique RGPD
#cd423a 5 Communication
#ff3ebb 5 Assistante DGS
#e2c63d 5 Urbanisme - Marchés Publics
#ff3ebb 5 Assistante DGS
#925210 4 Police Urbanisme
couleur degre_urgence nom
_______________________________
#e2c63d 5 Urbanisme - Marchés Publics
#000000 5 informatique RGPD
#925210 5 Police Urbanisme
#fff000 2 Accueil
#7bd026 1 ASVP
#cd423a 1 Communication
#ff3ebb 1 Assistante DGS
与分组依据
相同的查询
SELECT sp.couleur, sp.nom, d.degre_urgence
FROM demande_interservices AS d
LEFT JOIN demande_interservices_a_valider AS dv ON d.id = dv.demande_interservices_id
LEFT JOIN demande_interservices_affectee_a_sous_pole AS d_aff ON d.id = d_aff.demande_interservices_id
LEFT JOIN sous_pole AS sp ON d_aff.sous_pole_id = sp.id
WHERE d.pole_sollicite_id = (SELECT pole_id FROM utilisateur WHERE id = 38)
AND (d.statut_id = 1 OR d.statut_id = 2)
AND dv.demande_interservices_id IS NULL
GROUP BY nom
ORDER BY d.degre_urgence DESC
LIMIT 10
结果:
couleur degre_urgence nom
_______________________________
#cd423a 5 Communication
#cd423a 5 Communication
#ff3ebb 5 Assistante DGS
#925210 5 Police Urbanisme
#000000 5 informatique RGPD
#cd423a 5 Communication
#ff3ebb 5 Assistante DGS
#e2c63d 5 Urbanisme - Marchés Publics
#ff3ebb 5 Assistante DGS
#925210 4 Police Urbanisme
couleur degre_urgence nom
_______________________________
#e2c63d 5 Urbanisme - Marchés Publics
#000000 5 informatique RGPD
#925210 5 Police Urbanisme
#fff000 2 Accueil
#7bd026 1 ASVP
#cd423a 1 Communication
#ff3ebb 1 Assistante DGS
但我期待这些结果:
couleur degre_urgence nom
_______________________________
#cd423a 5 Communication
#ff3ebb 5 Assistante DGS
#925210 5 Police Urbanisme
#000000 5 informatique RGPD
#e2c63d 5 Urbanisme - Marchés Publics
可以使用min()和group by
SELECT min(sp.couleur), sp.nom
FROM demande_interservices AS d
LEFT JOIN demande_interservices_a_valider AS dv ON d.id = dv.demande_interservices_id
AND dv.demande_interservices_id IS NULL
LEFT JOIN demande_interservices_affectee_a_sous_pole AS d_aff ON d.id = d_aff.demande_interservices_id
LEFT JOIN sous_pole AS sp ON d_aff.sous_pole_id = sp.id
WHERE d.pole_sollicite_id = ( SELECT pole_id FROM utilisateur WHERE id = 38)
AND (d.statut_id = 1 OR d.statut_id = 2)
GROUP BY sp.nom
LIMIT 10
您必须根据第一次查询的结果分组:
select t.nom, min(t.couleur) from (
SELECT sp.couleur, sp.nom
FROM demande_interservices AS d
LEFT JOIN demande_interservices_a_valider AS dv ON d.id = dv.demande_interservices_id
LEFT JOIN demande_interservices_affectee_a_sous_pole AS d_aff ON d.id =
d_aff.demande_interservices_id
LEFT JOIN sous_pole AS sp ON d_aff.sous_pole_id = sp.id
WHERE d.pole_sollicite_id = (SELECT pole_id FROM utilisateur WHERE id = 38)
AND (d.statut_id = 1 OR d.statut_id = 2)
AND dv.demande_interservices_id IS NULL
ORDER BY d.degre_urgence DESC
LIMIT 10
) t
GROUP BY t.nom
MySql允许您使用couleur而不是min(couleur),尽管它不是sql标准。我得到了相同的结果:/answer updated。。对于一个错误的左连接。。无论如何,您的数据样本不可能获得与group by和not.相同的结果。。请确保选择中有min(sp.couleur)并再次显示相同的结果。为什么这个min()
会改变结果?选择min(sp.couleur)、sp.nom..和group by应该重新研究返回的行数isd.degree\u urgence
numeric?您是否可以将这些值添加到上面的示例表中,以了解排序依据。是的,它是一个介于1和5之间的整数。我对结果进行了编辑。这实际上是(新的)标准,如果couleur
在功能上依赖于nom
。哦,我明白了,我必须分两步来完成,以相同的结果分组。它工作得很好,谢谢你!!如果有人能解释为什么GROUP BY
和LIMIT
会影响结果,那就太好了,我想理解:)你想要结果的方式是:首先执行子查询,然后将其结果限制为10行,然后对这些有限的结果使用分组。这是我从您的预期结果中了解到的。事实上,这是用于分页的,每页上只显示10行。分组用于标题,标题必须与显示的10行一致。