sql distinct group by duplicity
Když použijete v SQL klíčové slovo DISTINCT
, získáte pouze unikátní hodnoty z určitého sloupce v tabulce.
Jinými slovy, DISTINCT
odstraní duplicity a vrátí každou hodnotu jen jednou.
Pokud sloupců zvolíte víc, získáte pro tyto sloupce unikátní hodnoty.
Tato funkcionalita se hodí, když chcete například získat seznam všech přístavů, kde se nalodili cestující Titanicu.
Varianty použití
SQL DISTINCT můžete použít v následujících kombinacích:
SELECT DISTINCT: Standardní použití příkazu
DISTINCT
. Slouží k získání unikátních hodnot z jednoho nebo více sloupců výsledného výběru. Tímto způsobem se eliminují duplicity a vracejí se pouze jedinečné hodnoty.COUNT DISTINCT: Použití
DISTINCT
ve spojení s agregační funkcíCOUNT
. Slouží k zjištění počtu unikátních hodnot v daném sloupci. Tímto způsobem se před výpočtem počtu eliminují duplicity.
Než začnete
Příklady v tomto článku si určitě vyzkoušejte. Pomohou vám s lepším zapamatováním toho, jak DISTINCT funguje.
Pro vyzkoušení si můžete buď stáhnout databázi PostgreSQL, která je zdarma:
anebo si vše vyzkoušet online, přímo ve vašem prohlížeči:
Pokud s SQL začínáte, bude se vám hodit kurz SQL pro analytiky, ve kterém po úspěšném absolvování získáte certifikát.
Vytvoření tabulky
Nejdříve si vytvoříte tabulku a nahrajete data.
CREATE TABLE TITANIC (
id INTEGER,
pclass INTEGER,
embarked VARCHAR(20)
);
-- Vložení dat
INSERT INTO TITANIC (id, pclass, embarked)
VALUES (1, 3, 'Southampton'),
(2, 1, 'Cherbourg'),
(3, 3, 'Southampton'),
(889, 3, 'Southampton'),
(890, 1, 'Cherbourg'),
(891, 3, 'Queenstown')
;
Vytvořili jste tabulku TITANIC
ze známé datové sady stejného jména.
Jak funguje DISTINCT
Asi nejjednodušší ukázkou toho, jak DISTINCT funguje je následující příklad. Názorně ukazuje, jak jeho použití ovlivní vrácená data.
Jak pomocí SQL zodpovědět následující otázku?
V jakých přístavech se cestující nalodili?
Naivní přístup by vypadal asi následovně:
Příklad 1
SELECT embarked
FROM TITANIC
;
embarked
-------------
Southampton
Cherbourg
Southampton
Southampton
Cherbourg
Queenstown
Výsledek ukáže všechny řádky a názvy přístavů se tak opakují.
Vy ale chcete zobrazit každý přístav jen jednou. Neboli, potřebujete odstranit duplicity.
Příklad 2
V jakých přístavech se cestující nalodili?
SELECT DISTINCT embarked
FROM TITANIC
;
embarked
-------------
Queenstown
Southampton
Cherbourg
Tento příkaz vrátí unikátní seznam přístavů, které použili cestující Titanicu. Pokud v tabulce existují záznamy se stejným přístavem, budou zobrazeny pouze jednou.
Nemusíte se samozřejmě omezovat jen na jednoduché příkazy.
Příklad 3
V jakých přístavech se nalodili zákazníci 3. třídy?
SELECT DISTINCT embarked
FROM TITANIC
WHERE pclass = 3
ORDER BY embarked
;
embarked
-------------
Queenstown
Southampton
COUNT DISTINCT
V následujícím příkladu si vyzkoušíte použití DISTINCT
ve spojení s COUNT
.
Příklad 4
Kolik je v tabulce cestovních tříd? Názvy znát nepotřebujete, zajímá vás jen jejich počet.
SELECT COUNT(DISTINCT pclass) AS "Počet cestovních tříd"
FROM TITANIC
;
Počet cestovních tříd
-----------------------
2
Co se stane, když slovo
DISTINCT
z předcházejícího příkladu odstraníte? Vyzkoušejte si to!
Více sloupců
DISTINCT
můžete využít i v případech, kde chcete odstranit duplicity pro více než jeden sloupec.
Příklad 5
Jaké třídy nastupovali v jednotlivých přístavech?
SELECT DISTINCT embarked, pclass
FROM TITANIC
ORDER BY embarked
;
embarked | pclass
-------------+--------
Cherbourg | 1
Queenstown | 3
Southampton | 3
Výsledek ukazuje, že pasažéři 1. třídy se nalodili výhradně v přístavu Cherbourg. Pasažéři 3. třídy zase využili ostatní dva přístavy.
Nezapomeňte, že v příkladech pracujete pouze ze šesti řádky. Jedná se o malou podmnožinu. Pokud byste použili celou datovou sadu, výsledek by samozřejmě vypadal jinak.
GROUP BY jako DISTINCT
Věděli jste, že GROUP BY
se může chovat stejně jako DISTINCT
?
Vyzkoušejte si následující příklad, který DISTINCT
nepoužívá a přesto vrátí stejný výsledek jako příklad předchozí.
Příklad 6
SELECT embarked, pclass
FROM TITANIC
GROUP BY embarked, pclass
ORDER BY embarked
;
embarked | pclass
-------------+--------
Cherbourg | 1
Queenstown | 3
Southampton | 3
Závěrem
DISTINCT
je snadno srozumitelná klauzule jazyka SQL, která odstraní duplicity z výsledné sady.
Pokud se chcete dále zdokonalit ve znalostech SQL a naučit se efektivně využívat tento základní jazyk všech datových analytiků, podívejte se na seznam kurzů zaměřených na SQL.
Našim kurzům věří jednotlivci, malé týmy i největší společnosti.