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

PostgreSQL GROUP BY różni się od MySQL?

Całkowicie niezgodny ze standardami MySQL GROUP BY może być emulowany przez DISTINCT ON Postgresa . Rozważ to:

MySQL:

SELECT a,b,c,d,e FROM table GROUP BY a

To dostarcza 1 wiersz na wartość a (który, tak naprawdę nie wiesz). Cóż, właściwie można się domyślać, ponieważ MySQL nie wie o agregacjach hash, więc prawdopodobnie użyje sortowania... ale będzie sortować tylko według a , więc kolejność wierszy może być losowa. Chyba że używa indeksu wielokolumnowego zamiast sortowania. Cóż, w każdym razie nie jest to określone w zapytaniu.

Postgres:

SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c

To dostarcza 1 wiersz na wartość a , ten wiersz będzie pierwszym w sortowaniu zgodnie z ORDER BY określone w zapytaniu. Proste.

Zauważ, że tutaj nie obliczam agregatu. Więc GROUP BY właściwie nie ma sensu. DISTINCT ON ma o wiele więcej sensu.

Railsy są powiązane z MySQL, więc nie dziwię się, że generuje SQL, który nie działa w Postgresie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Warunek WHERE w MySQL z 16 różnymi przykładami zapytań

  2. Porównaj tylko dzień i miesiąc z polem daty w mysql

  3. Jak stworzyć bezpieczny skrypt logowania w PHP i MySQL

  4. Pobierz najnowszy wiersz dla podanego identyfikatora

  5. Jak usunąć procedurę składowaną w MySQL?