-
Ja. Icke aggregerade kolumner är alla kolumner som inte använder en aggregeringsfunktion som
MAX,COUNT,SUM,GROUP_CONCAT, etc. -
Kolumn
aär funktionellt beroende av kolumnbom värdet påbinnebär ett särskilt värde påa. Detta betyder i allmänhet attbär en unik nyckel för tabellen ochaär någon annan kolumn i den tabellen. -
Unikt bestämt av är detsamma som funktionellt beroende.
-
Alternativet skulle vara att lista alla icke aggregerade kolumner i
GROUP BYlista:GROUP BY a.Z, a.Y, a.X.
Anledningen till allt detta är att när du väljer kolumner som inte finns i GROUP BY listan kommer de från godtyckliga rader i de grupperade raderna. Detta leder till många vanliga fel. Ett vanligt misstag är till exempel att skriva:
SELECT user_id, MAX(timestamp), ip_address
FROM user_logins
GROUP BY user_id
och förvänta dig ip_address för att innehålla adressen till den senaste inloggningen för varje användare. Men den kommer faktiskt att innehålla alla av adresserna de loggade in från, inte den från raden med MAX(timestamp) . Se SQL Välj endast rader med maxvärde på en kolumn
för det korrekta sättet att göra det.
Undantaget för funktionellt beroende är vanligtvis användbart med joins.
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
Sedan user_id är den primära nyckeln för users tabell, bestämmer den unikt user_name , så det är inte nödvändigt att lista det uttryckligen i GROUP BY .