Klauzule GROUP BY v SQL slouží k získání pouze unikátních řádků. Musíte zadat pouze sloupce, podle kterých to chcete vyhodnotit – a to stejně jak za GROUP BY tak za SELECT. Jediná výjimka je pro agregační funkce(SUM,AVG, aj.) . To ale vůbec nevadí, protože vám to vrátí (při správném dotazu) jen unikátní řádky, takže pak nějakou hodnotu primárního klíče či jiné důležité hodnoty získáte už snadno.
Pořád je to rychlejší než získávat více řádků a pak to dělat v serverové části kódu, kdy ještě hrozí riziko, že uděláte chybu a v nejhorší variantě přijdete o data. Takže pro příklad, máme tuto tabulku:
A tento SQL příkaz:
use SqlServerLearn;
SELECT c1,c2,MAX(c4) FROM test4 GROUP BY c1,c2
GOA ten nám vrátí tento výstup:

Jak vidíte, vrátily se nám pouze řádky, které mají jedinečné kombinace sloupců c1,c2 a pozor, nevrátil se nám první řádek, ale až druhý, protože jsme na c4 aplikovali funkci MAX. Ještě vám ukážu, co by vám SQL Server vypsal, kdybyste se pokusili vypsat sloupec, který není uveden v GROUP BY:
use SqlServerLearn;
SELECT c1,c2,c3,MAX(c4) FROM test4 GROUP BY c1,c2
GO