Mysql
 sql >> Base de données >  >> RDS >> Mysql

Problème avec Select Mysql Condition Group By Order

Si vous ajoutez

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';

Ensuite, vous verrez pourquoi d'autres SGBDR n'autorisent pas cette syntaxe :

  • 3 colonnes non agrégées dans SELECT mais une dans GROUP BY
  • La colonne ORDER BY n'est pas dans GROUP BY/SELECT et n'est pas agrégée

Si vous voulez GROUP BY plutôt que DISTINCT, alors vous devez GROUP BY all dans la colonne SELECT

SELECT s.serviceid, s.servicenameit, s.servicenameen 
FROM services s, kpi k, checklist_has_kpi chk 
WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61 
GROUP BY s.serviceid, s.servicenameit, s.servicenameen

Mais alors vous n'avez pas de chk.order pour trier par, que vous utilisiez GROUP BY ou DISTINCT

Alors qu'en est-il d'ignorer complètement les doublons ?

SELECT s.serviceid, s.servicenameit, s.servicenameen 
FROM services s, kpi k, checklist_has_kpi chk 
WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61 
ORDER BY chk.order ASC

Ou ceci pour COMMANDER PAR la première commande par 3x services colonnes

SELECT s.serviceid, s.servicenameit, s.servicenameen 
FROM services s, kpi k, checklist_has_kpi chk 
WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61 
GROUP BY s.serviceid, s.servicenameit, s.servicenameen
ORDER BY MIN(chk.order)