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

MySQL — wybór kolumny spoza grupy według

To prawda, że ​​ta funkcja zezwala na niektóre niejednoznaczne zapytania i po cichu zwraca zestaw wyników z dowolną wartością wybraną z tej kolumny. W praktyce zwykle jest to wartość z wiersza w grupie, która jest fizycznie przechowywana jako pierwsza.

Te zapytania nie są niejednoznaczne, jeśli wybierzesz tylko kolumny, które są funkcjonalnie zależne od kolumn w kryteriach GROUP BY. Innymi słowy, jeśli może istnieć tylko jedna odrębna wartość kolumny „niejednoznacznej” na wartość definiującą grupę, nie ma problemu. To zapytanie byłoby nielegalne w Microsoft SQL Server (i ANSI SQL), nawet jeśli logicznie nie może powodować niejednoznaczności:

SELECT AVG(table1.col1), table1.personID, persons.col4
FROM table1 JOIN persons ON (table1.personID = persons.id)
GROUP BY table1.personID;

Ponadto MySQL ma tryb SQL, dzięki któremu zachowuje się zgodnie ze standardem:ONLY_FULL_GROUP_BY

FWIW, SQLite zezwala również na te niejednoznaczne klauzule GROUP BY, ale wybiera wartość z ostatniej wiersz w grupie.

Przynajmniej w wersji, którą testowałem. Co to znaczy być dowolnym jest to, że MySQL lub SQLite mogą zmienić swoją implementację w przyszłości i mieć inne zachowanie. Dlatego nie powinieneś polegać na tym, że zachowanie pozostanie takie, jakie jest obecnie w niejednoznacznych przypadkach, takich jak ten. Lepiej jest przepisać zapytania, aby były deterministyczne i nie dwuznaczne. Dlatego MySQL 5.7 domyślnie włącza teraz ONLY_FULL_GROUP_BY.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawić plik do bazy danych MySQL?

  2. Lista SELECT nie znajduje się w klauzuli GROUP BY i zawiera niezagregowaną kolumnę .... niezgodna z sql_mode=only_full_group_by

  3. Kod PHP do konwersji zapytania MySQL na CSV

  4. Jak załadować konfigurację JDBC z przykładowego pliku właściwości

  5. Zainstaluj MySQL na komputerze Mac