-
Ano. Neagregované sloupce jsou všechny sloupce, které nepoužívají agregační funkci jako
MAX
,COUNT
,SUM
,GROUP_CONCAT
, atd. -
Sloupec
a
je funkčně závislý na sloupcib
pokud je hodnotab
implikuje konkrétní hodnotua
. To obecně znamená, žeb
je jedinečný klíč pro tabulku aa
je nějaký jiný sloupec v této tabulce. -
Jednoznačně určené pomocí je stejné jako funkční závislost.
-
Alternativou by bylo vypsat všechny neagregované sloupce v
GROUP BY
seznam:GROUP BY a.Z, a.Y, a.X
.
Důvodem toho všeho je, že když vyberete sloupce, které nejsou v GROUP BY
seznamu, budou pocházet z libovolných řádků ve seskupených řádcích. To vede k mnoha běžným chybám. Běžnou chybou je například napsat:
SELECT user_id, MAX(timestamp), ip_address
FROM user_logins
GROUP BY user_id
a očekávejte ip_address
obsahovat adresu posledního přihlášení pro každého uživatele. Ve skutečnosti však bude obsahovat jakékoli adres, ze kterých se přihlásili, nikoli adresy z řádku s MAX(timestamp)
. Viz SQL Vybrat pouze řádky s maximální hodnotou ve sloupci
pro správný způsob, jak to udělat.
Výjimka funkční závislosti je obvykle užitečná u spojení.
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
je primární klíč users
tabulka, jednoznačně určuje user_name
, takže to není nutné výslovně uvádět v GROUP BY
.