SQLShack (Polski)

W tym artykule omówiono operator SQL Count Distinct służący do eliminacji zduplikowane wiersze w zestawie wyników.

Programista musi pobrać dane z tabeli SQL z wieloma warunkami. Czasami chcemy uzyskać wszystkie wiersze w tabeli, ale wyeliminować dostępne wartości NULL. Załóżmy, że chcemy uzyskać różne rekordy klientów, którzy złożyli zamówienia w zeszłym roku.

Przejdźmy dalej i zapoznajmy się z krótkim przeglądem funkcji SQL Count.

Funkcja SQL Count

Używamy funkcji agregującej SQL Count, aby uzyskać liczbę wierszy w wyjście. Załóżmy, że mamy tabelę produktów, która zawiera zapisy dotyczące wszystkich produktów sprzedawanych przez firmę. Chcemy poznać liczbę sprzedanych produktów w ostatnim kwartale. Możemy użyć funkcji licznika SQL, aby zwrócić liczbę wierszy w określonym warunku.

Składnia funkcji SQL COUNT:
COUNT (wyrażenie);

Domyślnie, Funkcja licznika programu SQL Server używa słowa kluczowego All. Oznacza to, że SQL Server liczy wszystkie rekordy w tabeli. Zawiera również wiersze ze zduplikowanymi wartościami.

Utwórzmy przykładową tabelę i wstawimy do niej kilka rekordów.

W tej tabeli mamy zduplikowane wartości i wartości NULL. .

Na poniższym zrzucie ekranu możemy zauważyć, że:

  • Count (* ) zawiera zduplikowane wartości, a także wartości NULL.
  • Count (Col1) obejmuje zduplikowane wartości, ale nie zawiera wartości NULL.

Załóżmy, że chcemy poznać różne wartości dostępne w tabeli. W tym celu możemy użyć SQL COUNT DISTINCT.

1
2

Wybierz liczbę (DISTINCT COL1)
z ## TestTable

W poniższym wyniku otrzymamy tylko 2 wiersze. SQL COUNT Distinct nie eliminuje zduplikowanych i NULL wartości ze zbioru wyników.

Spójrzmy na inny przykład. W tym przykładzie mamy tabelę lokalizacji, która składa się z dwóch kolumn City i State.

Teraz wykonaj następujące zapytanie, aby znaleźć liczbę różnych miast z tabeli.

1
2

SELECT COUNT (DISTINCT (City))
FROM Location;

Zwraca liczbę unikalnych miast, licząc 2 (Gurgaon i Jaipur) z naszego zestawu wyników.

Jeśli spojrzymy na dane, mamy podobną nazwę miasta obecną w innym stan również. Połączenie miasta i stanu jest niepowtarzalne i nie chcemy, aby ta unikalna kombinacja została wyeliminowana z wyniku.

Możemy również użyć funkcji SQL DISTINCT na kombinacji kolumn. Sprawdza kombinację wartości i usuwa, jeśli nie jest ona unikalna.

1
2

SELECT DISTINCT Miasto, stan
FROM Location;

Nie usuwa zduplikowanych nazw miast z wyników ze względu na unikalną kombinację wartości.

Wstawmy jeszcze jeden wiersz w tabeli lokalizacji.

1

Wstaw do wartości lokalizacji („Gurgaon „,” Haryana „)

Mamy 5 rekordów w tabela lokalizacji. W danych widać, że mamy jedną kombinację miasta i stanu, która nie jest unikalna.

Ponownie uruchom SELECT DISTINCT funkcja i tym razem powinna zwrócić tylko 4 wiersze.

Nie możemy użyć funkcji SQL COUNT DISTINCT bezpośrednio z wieloma kolumnami . Pojawia się następujący komunikat o błędzie.

Możemy użyć tabeli tymczasowej, aby pobrać rekordy z funkcji SQL DISTINCT, a następnie użyć count (*), aby sprawdzić liczbę wierszy.

1
2
3
4

SELECT DISTINCT Miasto, stan
do #Temp
FROM Location;
Wybierz licznik (*) z #Temp

W wyniku otrzymujemy liczbę wierszy 4.

Jeśli użyjemy kombinacji kolumn, aby uzyskać odrębne wartości, a każda z kolumn zawiera wartości NULL, staje się również unikalną kombinacją dla SQL Server.

Aby to sprawdzić, wstawmy więcej rekordów do tabeli lokalizacji. W tym zapytaniu nie określiliśmy żadnego stanu.

1
2

Wstaw do wartości lokalizacji („Gurgaon”, „”)
Wstaw do wartości lokalizacji (miasta) („Gurgaon”)

Spójrzmy na dane tabeli lokalizacji.

Ponownie uruchom zapytanie, aby uzyskać odrębne wiersze z tabeli lokalizacji.

1
2

WYBIERZ odrębne miasto, stan
Z lokalizacji;

W wynikach widzimy, że nie eliminuje kombinacja miasta i stanu z wartościami pustymi lub NULL.

Podobnie, możesz zobaczyć liczbę wierszy 6 z SQL COUNT Funkcja DISTINCT.

Różnica między SELECT COUNT, COUNT (*) i SQL COUNT odrębna

LICZBA

Liczba (*)

Count (Distinct)

Zwraca całkowitą liczbę wierszy po spełnieniu warunków określonych w klauzuli Where.

Zwraca całkowitą liczbę wierszy po spełnieniu warunków określonych w klauzuli where.

Zwraca odrębną liczbę wierszy po spełnieniu warunków określonych w klauzuli where .

Podaje liczbę wierszy. Nie eliminuje zduplikowanych wartości.

Uwzględnia wszystkie wiersze niezależnie od zduplikowanych wartości NULL.

Daje odrębna liczba wierszy po wyeliminowaniu NULL i zduplikowanych wartości.

Eliminuje wartości NULL w wynikach.

Nie eliminuje wartości NULL z wyjścia.

Eliminuje wartości NULL w wyjściu.

Plan wykonania odrębnej funkcji licznika SQL

Spójrzmy na rzeczywisty plan wykonania funkcji SQL COUNT DISTINCT. Musisz włączyć rzeczywisty plan wykonania z paska menu SSMS, jak pokazano poniżej.

Wykonaj zapytanie, aby uzyskać rzeczywistą plan wykonania. W tym planie wykonania można zobaczyć operatory zajmujące najwięcej zasobów:

  • Sortuj (sortowanie odrębne) – koszt 78%
  • Skanowanie tabeli – koszt 22%

Możesz umieścić kursor myszy nad operatorem sortowania, a otworzy się podpowiedź ze szczegółami operatora.

W oknach właściwości otrzymujemy również więcej szczegółów na temat operatora sortowania, w tym przydział pamięci, statystyki i liczbę wierszy.

W tabeli z milionami rekordów SQL Count Distinct może powodować problemy z wydajnością, ponieważ odrębny operator count jest kosztownym operatorem w faktyczny plan wykonania.

SQL Server 2019 poprawia wydajność operatora SQL COUNT DISTINCT za pomocą nowej funkcji Approx_count_distinct. Ta nowa funkcja programu SQL Server 2019 zapewnia przybliżoną odrębną liczbę wierszy. Może występować niewielka różnica w wynikach funkcji liczby SQL i Approx_Count_distinct.

Możesz zastąpić SQL COUNT DISTINCT słowem kluczowym Approx_Count_distinct, aby użyć tej funkcji z SQL Server 2019.

1
2

SELECT APPROX_COUNT_DISTINCT (miasto)
Z lokalizacji;

Więcej informacji na temat tej funkcji można znaleźć w nowej funkcji Approx_Count_Distinct programu SQL Server 2019.

Podsumowanie

W tym artykule omówiliśmy funkcję SQL COUNT z różnymi przykładami. Omówiliśmy również nową funkcję SQL Approx_Count_distinct dostępną w SQL Server 2019. Sugerowałbym przejrzenie ich zgodnie z Twoim środowiskiem. Jeśli masz jakieś uwagi lub pytania, zostaw je w komentarzach poniżej.

  • Autor
  • Najnowsze posty
Jako certyfikowany przez MCSA i certyfikowany trener Microsoft w Gurgaon w Indiach, z 13-letnim doświadczeniem, Rajendra pracuje dla różnych dużych firm, koncentrując się na optymalizacji wydajności, monitorowaniu i wysokiej dostępności oraz strategie i wdrażanie odtwarzania po awarii. Jest autorem setek autorytatywnych artykułów na temat SQL Server, Azure, MySQL, Linux, Power BI, Performance Tuning, AWS / Amazon RDS, Git i powiązanych technologii, które do tej pory obejrzało ponad 10 milionów czytelników.
Jest twórcą jednej z największych bezpłatnych kolekcji artykułów online na jeden temat, obejmującej 50-częściową serię na temat grup dostępności SQL Server Always On. Dzięki swojemu wkładowi w społeczność SQL Server, został wyróżniony różnymi nagrodami, w tym prestiżową nagrodą „Najlepszy autor roku” nieprzerwanie w 2020 i 2021 roku w SQLShack.
Raj jest zawsze zainteresowany nowymi wyzwaniami, więc jeśli potrzebujesz konsultacji pomoc na każdy temat poruszony w jego pismach, można się z nim skontaktować pod adresem [email protected]
Wyświetl wszystkie posty Rajendry Gupty

Najnowsze posty Rajendry Gupty (zobacz wszystkie)
  • Limity czasu sesji w SQL Server Always On Availability Grupy – 8 lutego 2021
  • Wykonywanie mniejszych i głównych aktualizacji wersji AWS RDS SQL Server – 29 stycznia 2021
  • Wdrażanie wystąpień AWS RDS PostgreSQL – 27 stycznia 2021

Write a Comment

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *