DISTINCT dla wielu kolumn
Unikatowość kombinacji wartości
DISTINCT dla wielu kolumn to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Dlaczego wiele kolumn?
Wiesz już, że SELECT DISTINCT usuwa zduplikowane wiersze. Co jednak oznacza „duplikat”, gdy zapytanie zwraca wiele kolumn?
Wiersz jest uznawany za duplikat tylko wtedy, gdy każda wybrana kolumna ma taką samą wartość jak w innym wierszu. Jeśli różni się choć jedna kolumna, oba wiersze zostają zachowane.
Przykładowa tabela: Orders
Utwórzmy niewielką tabelę orders, aby poeksperymentować. Przechowuje ona informacje o tym, który klient kupił produkty z której kategorii i w jakim kraju.
CREATE TABLE orders (
id INTEGER,
customer VARCHAR(50),
category VARCHAR(50),
country VARCHAR(50)
);
INSERT INTO orders VALUES
(1, 'Alice', 'Electronics', 'US'),
(2, 'Alice', 'Books', 'US'),
(3, 'Bob', 'Electronics', 'UK'),
(4, 'Alice', 'Electronics', 'US'),
(5, 'Bob', 'Electronics', 'UK'),
(6, 'Carol', 'Clothing', 'CA');DISTINCT dla jednej kolumny
Krótkie przypomnienie: użycie DISTINCT dla jednej kolumny zwraca tylko każdą unikalną wartość tej kolumny.
Otrzymujemy tutaj każdą unikalną nazwę klienta — zaledwie trzy wiersze, mimo że istnieje sześć zamówień.
SELECT DISTINCT customer
FROM orders;DISTINCT dla dwóch kolumn
Teraz dodaj drugą kolumnę. Słowo kluczowe DISTINCT nadal pojawia się tylko raz, bezpośrednio po SELECT. Baza danych traktuje każdą unikalną parę (customer, category) jako jeden wiersz.
Alice pojawia się dwa razy — raz dla Electronics i raz dla Books — ponieważ są to dwie różne kombinacje.
SELECT DISTINCT customer, category
FROM orders;Jak sprawdzana jest unikalność
Baza danych porównuje kompletne migawki wierszy. Aby DISTINCT wyeliminował wiersz, wszystkie kolumny na liście SELECT muszą dokładnie odpowiadać wierszowi, który został już napotkany.
W naszej tabeli orders wiersze 3 i 5 mają postać (Bob, Electronics, UK) — są idealnie zgodne we wszystkich trzech kolumnach — dlatego jeden z nich zostaje wyeliminowany.
SELECT DISTINCT customer, category, country
FROM orders;
-- Row (Bob, Electronics, UK) appears only once
-- even though it occurs on rows 3 and 5Częściowe dopasowanie nie jest eliminowane
Alice ma dwa wiersze z wartością category = Electronics, ale w obu wartość country = US jest taka sama. Przy wybranych wszystkich trzech kolumnach te dwa oryginalne wiersze są identyczne, więc tylko jeden z nich zostaje zachowany.
Zmiana wyboru kolumn zmienia również test unikalności.
-- Select only customer + country
-- (Alice, US) appears twice in the table but DISTINCT keeps it once
SELECT DISTINCT customer, country
FROM orders;
-- Now add category back — uniqueness recalculated
SELECT DISTINCT customer, category, country
FROM orders;Praktyczny przypadek użycia: unikalne pary
Częstym zadaniem jest znalezienie każdej unikalnej kombinacji dwóch atrybutów — na przykład ustalenie, które kategorie produktów są sprzedawane w poszczególnych krajach, niezależnie od tego, ile razy każda sprzedaż miała miejsce.
SELECT DISTINCT category, country
FROM orders
ORDER BY category, country;Łączenie DISTINCT z WHERE
Najpierw można filtrować wiersze za pomocą WHERE, a następnie DISTINCT usuwa duplikaty z przefiltrowanego wyniku. Obie klauzule działają niezależnie — WHERE zawęża dane, a DISTINCT usuwa z nich duplikaty.
SELECT DISTINCT customer, category
FROM orders
WHERE country = 'US';DISTINCT a GROUP BY
Równoważnym sposobem uzyskania unikalnych kombinacji jest użycie GROUP BY. Oba podejścia dają ten sam wynik przy zwykłym usuwaniu duplikatów. Różnica ma znaczenie, gdy potrzebują Państwo agregacji: GROUP BY pozwala dodać COUNT(*), SUM() itp., natomiast DISTINCT nie.
-- Using DISTINCT
SELECT DISTINCT customer, category
FROM orders;
-- Equivalent using GROUP BY
SELECT customer, category
FROM orders
GROUP BY customer, category;Zliczanie unikalnych kombinacji
Umieszczenie DISTINCT dla wielu kolumn wewnątrz podzapytania pozwala zliczyć, ile istnieje unikalnych kombinacji. To wygodny sposób mierzenia różnorodności danych.
SELECT COUNT(*) AS unique_customer_category_pairs
FROM (
SELECT DISTINCT customer, category
FROM orders
) AS deduped;Częsty błąd: DISTINCT dotyczy wszystkich kolumn
Często spotykane nieporozumienie polega na tym, że DISTINCT miałby dotyczyć tylko pierwszej wymienionej kolumny. Tak nie jest. DISTINCT zawsze uwzględnia cały wiersz utworzony ze wszystkich wybranych kolumn.
Nie można zastosować DISTINCT tylko do niektórych kolumn, pozostawiając duplikaty w innych — w tym celu potrzebują Państwo funkcji okna, takich jak ROW_NUMBER().
-- This does NOT give distinct customers with any category
-- It gives distinct (customer, category) pairs
SELECT DISTINCT customer, category
FROM orders;
-- If you want one row per customer (any category), use:
SELECT customer, MIN(category) AS sample_category
FROM orders
GROUP BY customer;Szybkie sprawdzenie
Sprawdźmy, czy rozumieją Państwo działanie DISTINCT dla wielu kolumn.
Podsumowanie lekcji
Świetna praca! Oto, czego nauczyli się Państwo o używaniu DISTINCT dla wielu kolumn:
- DISTINCT dotyczy całego wiersza — wszystkie wybrane kolumny są sprawdzane razem.
- Wiersz jest eliminowany tylko wtedy, gdy każda kolumna dokładnie odpowiada kolumnie w już napotkanym wierszu.
- Dodanie kolumn do listy SELECT lub ich usunięcie zmienia sposób rozpoznawania duplikatów.
- Można dowolnie łączyć DISTINCT z WHERE i ORDER BY.
- GROUP BY jest równoważną alternatywą i jest wymagane, gdy potrzebują Państwo również agregacji.
Opanowanie DISTINCT dla wielu kolumn pozwala skutecznie analizować unikalne kombinacje w dowolnym zbiorze danych.
Często zadawane pytania
Czy lekcja „DISTINCT dla wielu kolumn” jest bezpłatna?
Tak — pełny tekst „DISTINCT dla wielu kolumn” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „DISTINCT dla wielu kolumn”?
Unikatowość kombinacji wartości Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „DISTINCT dla wielu kolumn”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawy SELECT DISTINCT
- DISTINCT dla wielu kolumn
- PostgreSQL DISTINCT ON
- Zliczanie unikatowych wartości