Mysql
 sql >> Database >  >> RDS >> Mysql

Problema con Seleziona il gruppo di condizioni Mysql per ordine

Se aggiungi

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';

Quindi vedrai il motivo per cui altri RDBMS non consentono questa sintassi:

  • 3 colonne non aggregate in SELECT ma una in GROUP BY
  • La colonna ORDINA PER non è in GROUP BY/SELECT e non è aggregata

Se vuoi GROUP BY piuttosto che DISTINCT, allora devi GROUP BY tutte le colonne in 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

Ma allora non hai chk.order per ordinare, utilizzando GROUP BY o DISTINCT

Che ne dici di questo, ignorando completamente i duplicati?

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

O questo per ORDINARE PER il primo ordine per 3x services colonne

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)