GROUP BY
mapuje skupiny řádků na jeden řádek pro každou odlišnou hodnotu v specifické sloupce, které ani nemusí být nutně ve výběrovém seznamu.
SELECT b, c, d FROM table1 GROUP BY a;
Tento dotaz je legální SQL (oprava: pouze v MySQL; ve skutečnosti to není standardní SQL a není podporováno jinými značkami). MySQL to akceptuje a důvěřuje, že víte, co děláte, výběrem b
, c
a d
jednoznačným způsobem, protože jde o funkční závislosti a
.
Microsoft SQL Server a další značky však tento dotaz nepovolují, protože nedokáže snadno určit funkční závislosti. upravit: Místo toho standardní SQL vyžaduje, abyste se řídili pravidlem jedné hodnoty , tj. každý sloupec ve výběrovém seznamu musí být buď pojmenován v GROUP BY
klauzule nebo může být argumentem množinové funkce.
Zatímco DISTINCT
vždy prohlíží všechny sloupce ve výběrovém seznamu a pouze tyto sloupce. Je běžnou mylnou představou, že DISTINCT
umožňuje zadat sloupce:
SELECT DISTINCT(a), b, c FROM table1;
Přes závorky tvořící DISTINCT
vypadat jako volání funkce, není. Je to možnost dotazu a odlišná hodnota v kterémkoli ze tří polí výběrového seznamu povede k odlišnému řádku ve výsledku dotazu. Jeden z výrazů v tomto výběrovém seznamu má kolem sebe závorky, ale to neovlivní výsledek.