Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Problema com Select Mysql Condition Group por ordem


Se você adicionar
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';

Então você verá o motivo pelo qual outros RDBMS não permitem essa sintaxe:
  • 3 colunas não agregadas em SELECT, mas uma em GROUP BY
  • A coluna ORDER BY não está em GROUP BY/SELECT e não está agregada

Se você quiser GROUP BY em vez de DISTINCT, precisará GROUP BY all na coluna 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

Mas então você não tem chk.order para encomendar, seja usando GROUP BY ou DISTINCT

Então, e quanto a isso, ignorando completamente as duplicatas?
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 isso para ORDER BY o primeiro pedido por 3x services colunas
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)