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

MySQL 5.7 i only_full_group_by

  1. TAk. Kolumny niezagregowane to dowolne kolumny, które nie używają funkcji agregacji, takiej jak MAX , COUNT , SUM , GROUP_CONCAT itp.

  2. Kolumna a jest funkcjonalnie zależny od kolumny b jeśli wartość b implikuje konkretną wartość a . Ogólnie oznacza to, że b jest unikalnym kluczem dla tabeli, a a to jakaś inna kolumna w tej tabeli.

  3. Wyjątkowo określony przez jest tym samym, co zależność funkcjonalna.

  4. Alternatywą byłoby wyświetlenie listy wszystkich niezagregowanych kolumn w GROUP BY lista:GROUP BY a.Z, a.Y, a.X .

Powodem tego wszystkiego jest to, że po wybraniu kolumn, które nie znajdują się w GROUP BY listy, będą pochodzić z dowolnych wierszy w zgrupowanych wierszach. Prowadzi to do wielu typowych błędów. Na przykład częstym błędem jest napisanie:

SELECT user_id, MAX(timestamp), ip_address
FROM user_logins
GROUP BY user_id

i oczekuj ip_address zawierać adres ostatniego logowania dla każdego użytkownika. Ale w rzeczywistości będzie zawierać dowolne z adresów, z których się zalogowali, a nie z wiersza z MAX(timestamp) . Zobacz SQL Wybierz tylko wiersze z maksymalną wartością w kolumnie we właściwy sposób, aby to zrobić.

Wyjątek zależności funkcjonalnej jest zazwyczaj przydatny w przypadku złączeń.

SELECT u.user_id, u.user_name, MAX(l.timestamp)
FROM users AS u
JOIN user_logins AS l ON u.user_id = l.user_id
GROUP BY u.user_id

Od user_id jest podstawowym kluczem users tabeli, jednoznacznie określa user_name , więc nie ma potrzeby wymieniać tego wyraźnie w 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. dynamicznie rozwijane w nodejs mysql

  2. MySQLdb z wieloma transakcjami na połączenie

  3. Nie można użyć zestawu znaków utf8mb4 z CloudSQL w AppEngine Python

  4. Jak uzyskać identyfikator ostatniego zaktualizowanego wiersza w MySQL?

  5. Wykonanie Pythona + MySQLdb