-
Ano. Neagregované sloupce jsou všechny sloupce, které nepoužívají agregační funkci jako
MAX,COUNT,SUM,GROUP_CONCAT, atd. -
Sloupec
aje funkčně závislý na sloupcibpokud je hodnotabimplikuje konkrétní hodnotua. To obecně znamená, žebje jedinečný klíč pro tabulku aaje 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 BYseznam: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 .