sql >> Database >  >> RDS >> Mysql

Probleem met Select Mysql Condition Group By Order

Als je

. toevoegt
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';

Dan zie je waarom andere RDBMS deze syntaxis niet toestaan:

  • 3 niet-geaggregeerde kolommen in SELECT maar één in GROUP BY
  • ORDER BY-kolom staat niet in GROUP BY/SELECT en is niet geaggregeerd

Als u GROUP BY wilt in plaats van DISTINCT, dan moet u GROUP BY alle kolommen in de 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

Maar dan heb je geen chk.order om op te bestellen, of u nu GROUP BY of DISTINCT gebruikt

Dus hoe zit het hiermee, duplicaten volledig negeren?

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

Of dit om te BESTELLEN OP de vroegste bestelling per 3x services kolommen

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)



  1. PDO:rijnaam als index van resultaatarray

  2. Oracle-query voor het verkrijgen van een bepaalde datum

  3. het aantal keren tellen dat een script wordt uitgevoerd

  4. SQL Server 2005 Trapsgewijs verwijderen