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

Zachowanie GROUP BY, gdy w klauzuli SELECT nie ma funkcji agregujących

Przeczytaj dokumentację MySQL w tym konkretnym punkcie.

Krótko mówiąc, MySQL umożliwia pominięcie niektórych kolumn z grupy GROUP BY, ze względu na wydajność, jednak działa to tylko jeśli wszystkie pominięte kolumny mają tę samą wartość (w ramach grupy), w przeciwnym razie wartości zwracane przez zapytanie są rzeczywiście nieokreślone , jak prawidłowo odgadli inni w tym poście. Aby mieć pewność, że dodanie klauzuli ORDER BY nie wprowadzi ponownie żadnej formy zachowania deterministycznego.

Chociaż nie jest to istotą problemu, ten przykład pokazuje, że użycie * zamiast jawnego wyliczenia pożądanych kolumn jest często złym pomysłem.

Fragment dokumentacji MySQL 5.0:

When using this feature, all rows in each group should have the same values
for the columns that are omitted from the GROUP BY part. The server is free
to return any value from the group, so the results are indeterminate unless
all values are the same. 


  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 uzyskać strukturę bazy danych w MySQL za pomocą zapytania?

  2. PDO z INSERT INTO poprzez przygotowane zestawienia

  3. Test wydajności MySQL:MySQL 5.7 kontra MySQL 8.0

  4. Hosting MySQL na platformie Azure, w pełni zarządzana usługa bazy danych w chmurze wprowadzana na ScaleGrid

  5. Zapobieganie wstrzykiwaniu SQL w Node.js