Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Problem mit Select Mysql Condition Group By Order

Wenn Sie hinzufügen

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';

Dann werden Sie sehen, warum andere RDBMS diese Syntax nicht zulassen:

  • 3 nicht aggregierte Spalten in SELECT, aber eine in GROUP BY
  • ORDER BY-Spalte ist nicht in GROUP BY/SELECT und nicht aggregiert

Wenn Sie lieber GROUP BY als DISTINCT verwenden möchten, müssen Sie in der SELECT-Spalte GROUP BY all angeben

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

Aber dann haben Sie keine chk.order um zu sortieren, ob mit GROUP BY oder DISTINCT

Was ist also damit, Duplikate vollständig zu ignorieren?

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

Oder dies zu ORDER BY die früheste Bestellung pro 3x services Spalten

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)