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

Jakie są zalety trybu only_full_group_by?

only_full_group_by =wł. mówi silnikowi MySQL:nie stosuj GROUP BY gdy masz wątpliwości, jakie wyniki pokazać i wyrzuć błąd. Tylko zastosuj, jeśli Group By konkretnie mówi ci, co robić. np. gdy Group By jest pełny i doskonały!

only_full_group_by =wyłączone mówi silnikowi MySQL:zawsze stosuj GROUP BY a jeśli masz wątpliwości, jakie wyniki wybrać, po prostu wybierz jeden losowo!

Nie musisz go wyłączać, jeśli używasz GROUP BY prawidłowo!

Przykład:

Tabela:użytkownicy

 id   |  name
----------------
  1      ali
  2      john
  3      ali

Kiedy używasz GROUP BY na name kolumna:

SELECT * FROM users GROUP BY name;

Możliwe są dwa wyniki:

  1      ali
  2      john     

LUB

  2      john     
  3      ali

MYSQL nie wie, jaki wynik wybrać! Ponieważ istnieją różne id s, ale oba mają name=ali .

Rozwiązanie 1:

tylko wybranie name pole:

SELECT name FROM users GROUP BY name;

wynik:

  ali
  john     

To idealne rozwiązanie. usuwanie kolumn, które tworzą GROUP BY zmieszany. Oznacza to, że wiesz, co robisz. Zwykle nie potrzebujesz
tych kolumn, ale jeśli ich potrzebujesz, przejdź do Rozwiązania3 !

Rozwiązanie 2:

Wyłączanie only_full_group_by . MYSQL wybierze jeden z dwóch możliwych wyników LOSOWO !! (W porządku, jeśli naprawdę nie obchodzi Cię, jaki id wybierze, ale pamiętaj, aby włączyć go natychmiast po zapytaniu, aby zapobiec nieoczekiwanym zachowaniom w przyszłości groupBys)

Rozwiązanie3

Użyj Aggregate funkcja jak MIN() , MAX() aby pomóc MYSQL w podjęciu decyzji, co musi wybrać.

Na przykład:

SELECT MAX(id), name FROM users GROUP BY name;

wynik:

  2      john     
  3      ali

Wybierze ali wiersz, który ma maksymalny id .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaktualizuj kolumnę na podstawie pasujących wartości w innej tabeli w mysql

  2. meta_query, jak wyszukiwać za pomocą relacji OR i AND?

  3. MySQL zgłasza błąd nieprawidłowej wartości ciągu

  4. Jak przekonwertować z varbinary na char/varchar w mysql

  5. Czy kolejność pól indeksu wielokolumnowego w MySQL ma znaczenie?