Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL 5.7 &only_full_group_by

  1. да. Неагрегирани колони са всяка колона, която не използва функция за агрегиране като MAX , COUNT , SUM , GROUP_CONCAT и др.

  2. Колона a е функционално зависима от колона b ако стойността на b предполага конкретна стойност на a . Това обикновено означава, че b е уникален ключ за таблицата и a е друга колона в тази таблица.

  3. Уникално определен от е същото като функционалната зависимост.

  4. Алтернативата би била да се изброят всички неагрегирани колони в GROUP BY списък:GROUP BY a.Z, a.Y, a.X .

Причината за всичко това е, че когато изберете колони, които не са в GROUP BY списък, те ще идват от произволни редове в групираните редове. Това води до много често срещани грешки. Например често срещана грешка е да се пише:

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

и очаквайте ip_address да съдържа адреса на последното влизане за всеки потребител. Но всъщност ще съдържа всякакво от адресите, от които са влезли, а не този от реда с MAX(timestamp) . Вижте SQL Изберете само редове с максимална стойност в колона за правилния начин да направите това.

Изключението за функционална зависимост обикновено е полезно с съединения.

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

Тъй като user_id е първичният ключ на users таблица, той уникално определя user_name , така че не е необходимо да го изброявате изрично в 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. Delete, Truncate или Drop, за да изчистите таблица в MySQL

  2. mySQL заявка за дължина и ширина за други редове в радиус от x мили

  3. Прехвърлете QR кода в MySql база данни

  4. Използване на NoSQL база данни през MySQL

  5. Yii CDbConnection не успя да отвори връзката с DB:не можа да намери драйвер с google cloud sql