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

Problem med Vælg Mysql-tilstandsgruppe efter ordre

Hvis du tilføjer

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';

Så vil du se, hvorfor andre RDBMS ikke tillader denne syntaks:

  • 3 ikke-aggregerede kolonner i SELECT, men én i GROUP BY
  • ORDER BY-kolonnen er ikke i GROUP BY/SELECT og er ikke aggregeret

Hvis du vil GRUPPERE EFTER frem for DISTINCT, skal du GRUPPERE EFTER alle kolonnen i 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

Men så har du ingen chk.order at bestille efter, uanset om du bruger GROUP BY eller DISTINCT

Så hvad med dette, at ignorere dubletter fuldstændigt?

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

Eller dette for at BESTILLE VED den tidligste ordre pr. 3x services kolonner

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. SELECT SQL_CALC_FOUND_ROWS Forespørgsel meget langsom mere end 250.000 poster

  2. Kan ikke lave batch-indsættelse i Oracle DB ved hjælp af MyBatis

  3. Maksimalt antal tegn i etiketter (tabelnavne, kolonner osv.)

  4. MySQL-forespørgsel kører to gange