SQL — DISTINCT

Zpět na blog

SQL — DISTINCT

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:

  1. 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.

  2. 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.


Líbil se vám článek? Sdílejte ho s ostatními

nebo nám napište něco hezkého. Děkujeme!

Zpět na blog

SQL pro analytiky

Naučte se základy SQL a relačních databází. Komplexní kurz, který vám dá jistotu při psaní databázových dotazů.

Zobrazit kurz

SQL pro analytiky 2 - pokročilí

Naučte se vytvářet složité dotazy, databázové objekty a používat pokročilé funkce jazyka SQL.

Zobrazit kurz

OK, Python

Automatizujte rutinní práci v Excelu, nechte za sebe pracovat Python a zjednodušte si život.

Zobrazit knihu

Hledáme další autory

Publikujte na Lovely Blogu a inspirujte ostatní! Sdílením svých znalosti si budujete osobní značku.

Kontaktujte nás

Odběr novinek

Novinky, návody a tipy přímo do vašeho emailu.

Copyright © 2018-2024, Colorbee, s.r.o.

Designed by grafikli.cz in Prague.