Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Problem z wyborem grupy warunków Mysql według zamówienia

Jeśli dodasz

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';

Wtedy zobaczysz, dlaczego inne RDBMS nie pozwalają na tę składnię:

  • 3 niezagregowane kolumny w SELECT, ale jedna w GROUP BY
  • Kolumna ORDER BY nie znajduje się w GROUP BY/SELECT i nie jest zagregowana

Jeśli chcesz GRUPOWAĆ WEDŁUG zamiast DISTINCT, musisz GRUPOWAĆ WEDŁUG wszystkich kolumn w WYBIERZ

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

Ale wtedy nie masz chk.order zamówić przez, niezależnie od tego, czy używasz GROUP BY, czy DISTINCT

A co z tym, że całkowicie ignorujesz duplikaty?

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

Lub to, aby ZAMÓWIĆ WEDŁUG najwcześniejszego zamówienia za 3x services kolumny

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Obsługa przestrzennych baz danych MySQL VS Postgres/POSTGIS

  2. Optymalizacja zapytania mysql (lubi/nie lubi)

  3. mysql duplikaty z LOAD DATA INFILE

  4. Jak wymusić unikatowość w MySQL?

  5. Czy istnieje sposób na uzyskanie ostatniego wstawionego identyfikatora NON-automatycznie zwiększanej kolumny w MySQL?