Articles

SQL GROUP BY i klauzula HAVING z przykładami


Co to jest klauzula SQL Group by?

klauzula GROUP BY jest poleceniem SQL, które jest używane do grupowania wierszy, które mają te same wartości. Klauzula GROUP BY jest używana w instrukcji SELECT. Opcjonalnie jest on używany w połączeniu z funkcjami agregacji do tworzenia raportów podsumowujących z bazy danych.

właśnie to robi, podsumowując dane z bazy danych.

zapytania zawierające klauzulę GROUP BY są nazywane zapytaniami grupowymi i zwracają tylko jeden wiersz dla każdego elementu zgrupowanego.,

SQL GROUP BY Syntax

teraz, gdy wiemy, czym jest klauzula SQL GROUP BY, przyjrzyjmy się składni dla basic group by query.

SELECT statements... GROUP BY column_name1 ;

tutaj

  • „SELECT statements…”jest standardowym zapytaniem poleceń SQL SELECT.
  • „GROUP BY column_name1” jest klauzulą, która wykonuje grupowanie na podstawie column_name1.
  • „” jest opcjonalne; przedstawia Inne nazwy kolumn, gdy grupowanie odbywa się na więcej niż jednej kolumnie.
  • „” jest opcjonalne; służy do ograniczenia wierszy, których dotyczy klauzula GROUP BY., Jest on podobny do klauzuli WHERE.

grupowanie za pomocą jednej kolumny

aby pomóc zrozumieć efekt klauzuli SQL Group By, wykonajmy proste zapytanie, które zwraca wszystkie wpisy płci z tabeli members.

SELECT `gender` FROM `members` ;


gender

Female


Female


Male


Female


Male


Male


Male


Male


Male


Załóżmy, że chcemy uzyskać unikalne wartości dla płci. Możemy użyć następującego zapytania-

SELECT `gender` FROM `members` GROUP BY `gender`;

wykonanie powyższego skryptu w MySQL workbench przeciwko Myflixdb daje nam następujące wyniki.,


gender

Female


Male


Uwaga zwrócono tylko dwa wyniki. To dlatego, że mamy tylko dwa typy płci męskiej i żeńskiej. Klauzula GROUP BY w SQL grupuje wszystkie” męskie ” członkowie razem i zwraca tylko jeden wiersz dla niego. Podobnie było z” żeńskimi ” członkami.

grupowanie za pomocą wielu kolumn

Załóżmy, że chcemy uzyskać listę Movie category_id i odpowiadających im lat, w których zostały wydane.,

obserwujmy wyjście tego prostego zapytania

SELECT `category_id`,`year_released` FROM `movies` ;

category_id year_released
1 2011
2 2008
NULL 2008
NULL 2010
8 2007
6 2007
6 2007
8 2005
NULL 2012
7 1920
8 NULL
8 1920

powyższy wynik ma wiele duplikatów.

wykonajmy to samo zapytanie używając group by w SQL –

SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;

wykonanie powyższego skryptu w MySQL workbenchu z myflixdb daje nam następujące wyniki pokazane poniżej.

category_id year_released
NULL 2008
NULL 2010
NULL 2012
1 2011
2 2008
6 2007
7 1920
8 1920
8 2005
8 2007

klauzula GROUP BY działa zarówno na identyfikatorze kategorii, jak i wydanym roku, aby zidentyfikować unikalne wiersze w powyższym przykładzie.,

Jeśli identyfikator kategorii jest taki sam, ale rok wydania jest inny, to wiersz jest traktowany jako unikalny .Jeśli identyfikator kategorii i rok wydania są takie same dla więcej niż jednego wiersza, jest on uważany za duplikat i wyświetlany jest tylko jeden wiersz.

funkcje grupowania i agregowania

Załóżmy, że chcemy mieć całkowitą liczbę mężczyzn i kobiet w naszej bazie danych. Możemy użyć poniższego skryptu pokazanego poniżej, aby to zrobić.

SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;

wykonanie powyższego skryptu w MySQL workbench na podstawie myflixdb daje nam następujące wyniki.,

gender COUNT('membership_number')
Female 3
Male 5

wyniki pokazane poniżej są pogrupowane według każdej opublikowanej unikalnej wartości płci, a liczba zgrupowanych wierszy jest liczona za pomocą funkcji count aggregate.

ograniczanie wyników zapytań za pomocą klauzuli HAVING

nie zawsze będziemy chcieli wykonywać grupowania na wszystkich danych w danej tabeli. Będą chwile, kiedy będziemy chcieli ograniczyć nasze wyniki do określonych kryteriów. W takich przypadkach możemy użyć klauzuli HAVING

Załóżmy , że chcemy znać wszystkie lata wydania dla kategorii filmów id 8., Użyjemy poniższego skryptu, aby osiągnąć nasze wyniki.

SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;

wykonanie powyższego skryptu w MySQL workbench przeciwko Myflixdb daje nam następujące wyniki pokazane poniżej.

movie_id title director year_released category_id
9 Honey mooners John Schultz 2005 8
5 Daddy's Little Girls NULL 2007 8

Uwaga tylko filmy z kategorią id 8 zostały objęte klauzulą GROUP BY.

podsumowanie

  • klauzula SQL GROUP BY służy do grupowania wierszy o tych samych wartościach.
  • Klauzula GROUP BY jest używana razem z instrukcją SQL SELECT.,
  • instrukcja SELECT używana w klauzuli GROUP BY może być używana tylko w nazwach kolumn, funkcji agregujących, stałych i wyrażeń.
  • SQL Having Clause jest używany do ograniczenia wyników zwracanych przez klauzulę GROUP BY.
  • klauzula MYSQL GROUP BY służy do zbierania danych z wielu rekordów i zwracania rekordów ustawionych przez jedną lub więcej kolumn.