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

Grupuj według klauzuli w mySQL i postgreSQL, skąd błąd w postgreSQL?

Musisz użyć FUNKCJI AGREGACJI :

Funkcje agregujące obliczają pojedynczy wynik ze zbioru wartości wejściowych.

SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1
FROM the_table 
GROUP BY col2;

db<>demonstracja skrzypiec

Obsługa MySQL dla GROUP BY :

W standardowym języku SQL zapytanie zawierające klauzulę GROUP BY nie może odwoływać się do niezagregowanych kolumn na liście wyboru, które nie są wymienione w klauzuli GROUP BY

i:

MySQL rozszerza użycie GROUP BY, dzięki czemu lista wyboru może odwoływać się do niezagregowanych kolumn, których nie wymieniono w klauzuli GROUP BY. Oznacza to, że poprzednie zapytanie jest legalne w MySQL. Możesz użyć tej funkcji, aby uzyskać lepszą wydajność, unikając niepotrzebnego sortowania i grupowania kolumn. Jest to jednak przydatne przede wszystkim wtedy, gdy wszystkie wartości w każdej niezagregowanej kolumnie nienazwanej w grupie GROUP BY są takie same dla każdej grupy. Serwer może wybrać dowolną wartość z każdej grupy, więc jeśli nie są takie same, wybrane wartości są nieokreślone

Tak więc z wersją MySQL bez jawnej funkcji agregującej możesz skończyć z niedeterministycznymi wartościami. Zdecydowanie sugeruję użycie określonej funkcji agregującej.

EDYTUJ:

Od Obsługa MySQL dla grupy GROUP BY :

SQL92 i wcześniejsze nie zezwalają na zapytania, dla których lista wyboru, warunek HAVING lub lista ORDER BY odnoszą się do kolumn niezagregowanych, które nie są wymienione w klauzuli GROUP BY.

SQL99 i nowsze zezwalają na takie nieagregaty na opcjonalną funkcję T301 jeśli są one funkcjonalnie zależne od kolumn GROUP BY: Jeśli taki związek istnieje między nazwą a cusid, zapytanie jest poprawne. Tak by było na przykład, gdyby cusid był głównym kluczem klientów.

Przykład:

SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o
JOIN customers AS c
  ON o.custid = c.custid
GROUP BY o.custid;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj rekordy z najwyższym/najmniejszym <cokolwiek> na grupę

  2. CROSS/OUTER APPLY w MySQL

  3. Pobranie wszystkich wierszy nadrzędnych w jednym zapytaniu SQL

  4. SQL - Jak transponować?

  5. Usuń klucz podstawowy w MySQL