-
Ja. Ikke-aggregerede kolonner er enhver kolonne, der ikke bruger en aggregeringsfunktion såsom
MAX,COUNT,SUM,GROUP_CONCATosv. -
Kolonne
aer funktionelt afhængig af kolonnebhvis værdien af bindebærer en bestemt værdi afa. Dette betyder generelt, atber en unik nøgle til tabellen ogaer en anden kolonne i den tabel. -
Entydigt bestemt af er det samme som funktionel afhængighed.
-
Alternativet ville være at liste alle ikke-aggregerede kolonner i
GROUP BYliste:GROUP BY a.Z, a.Y, a.X.
Grunden til alt dette er, at når du vælger kolonner, der ikke er i GROUP BY liste, vil de komme fra vilkårlige rækker i de grupperede rækker. Dette fører til mange almindelige fejl. For eksempel er en almindelig fejl at skrive:
SELECT user_id, MAX(timestamp), ip_address
FROM user_logins
GROUP BY user_id
og forventer ip_address til at indeholde adressen på det seneste login for hver bruger. Men den vil faktisk indeholde enhver af de adresser, de loggede ind fra, ikke den fra rækken med MAX(timestamp) . Se SQL Vælg kun rækker med maksimal værdi på en kolonne
for den korrekte måde at gøre det på.
Den funktionelle afhængighedsundtagelse er typisk nyttig 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
Siden user_id er den primære nøgle for users tabel, bestemmer den entydigt user_name , så det er ikke nødvendigt at angive det eksplicit i GROUP BY .