Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在具有限制和偏移的结果上使用GROUP BY?_Mysql_Group By_Limit_Offset - Fatal编程技术网

Mysql 如何在具有限制和偏移的结果上使用GROUP BY?

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

我使用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_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应该重新研究返回的行数is
d.degree\u urgence
numeric?您是否可以将这些值添加到上面的示例表中,以了解排序依据。是的,它是一个介于1和5之间的整数。我对结果进行了编辑。这实际上是(新的)标准,如果
couleur
在功能上依赖于
nom
。哦,我明白了,我必须分两步来完成,以相同的结果分组。它工作得很好,谢谢你!!如果有人能解释为什么
GROUP BY
LIMIT
会影响结果,那就太好了,我想理解:)你想要结果的方式是:首先执行子查询,然后将其结果限制为10行,然后对这些有限的结果使用分组。这是我从您的预期结果中了解到的。事实上,这是用于分页的,每页上只显示10行。分组用于标题,标题必须与显示的10行一致。