Ten samouczek jest częścią serii Naucz się podstawowych zapytań SQL przy użyciu MySQL. W tym samouczku omówimy zapytania SQL służące do grupowania wierszy tabeli w MySQL za pomocą klauzuli GROUP BY z funkcjami agregującymi. Możesz również śledzić Korzystanie z funkcji agregujących (SUM, AVG, MAX, MIN, COUNT, DISTINCT) w MySQL, aby poznać funkcje agregujące.
Grupuj według zapytania
GRUPA WG Klauzula może służyć do grupowania wierszy tabeli. Może być również używany z funkcjami agregacji do generowania raportów i zbierania danych statystycznych.
# GROUP BY - Syntax
SELECT column_1, column_2, ..., [<aggregate function> AS <column>] FROM `table_name` GROUP BY column_1, column_2, ...;
Objaśnienie zapytania
GRUPA WG Klauzula może być użyta do grupowania wierszy poprzez określenie kolumn tworzących zestaw wierszy.
Możemy użyć funkcji agregujących, aby skutecznie wykorzystać klauzulę GROUP BY do generowania raportów i zbierania danych statystycznych.
Grupowanie można zastosować w wielu kolumnach, gdzie pierwsza kolumna będzie stanowić grupę podstawową, a kolejne kolumny utworzą podgrupy.
Przykłady
Ta sekcja zawiera przykłady wykonywania grupowania przy użyciu klauzuli GROUP BY z funkcjami agregacji i bez nich. Użyj poniższego zapytania, aby utworzyć tabelę użytkowników zawierającą identyfikator, imię, nazwisko, wiek i aktywne kolumny do przechowywania danych użytkownika.
# Create the User Table
CREATE TABLE `enterprise`.`user` (
`user_id` BIGINT NOT NULL,
`first_name` VARCHAR(45) ,
`last_name` VARCHAR(45),
`age` SMALLINT(6) NOT NULL DEFAULT 0,
`active` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`user_id`));
Poniższe zapytanie może zostać użyte do wstawienia danych testowych do tabeli użytkowników.
# Insert Rows - All Columns
INSERT INTO `user` ( `user_id`, `first_name`, `last_name`, `age`, `active` ) VALUES
( 1, 'John', 'Smith', 18, 1 ),
( 2, 'Rick', 'Jones', 19, 1 ),
( 3, 'John', 'Ponting', 16, 0 ),
( 4, 'Harsh', 'Upadhyay', 20, 1 ),
( 5, 'Tajwinder', 'Singh', 18, 0 );
Wspomniane powyżej zapytanie wstawi do tabeli 5 wierszy z identyfikatorem, imieniem, nazwiskiem i aktywnymi kolumnami reprezentującymi 5 różnych użytkowników.
Teraz do grupowania wierszy użyjemy klauzuli GROUP BY bez funkcji agregujących. Można to zrobić za pomocą klauzuli GROUP BY w MySQL, jak pokazano poniżej.
# GROUP BY - Generate the set of active values
SELECT active from user GROUP BY active;
# Result
1
0
# GROUP BY - Generate the set of first name
SELECT first_name from user GROUP BY first_name;
# Result
John
Rick
Harsh
Tajwinder
Wyżej wymienione zapytania zwróciły zestaw wyników poprzez grupowanie wierszy za pomocą klauzuli GROUP BY. Teraz zgrupujemy wiersze za pomocą funkcji agregującej, jak pokazano poniżej.
# GROUP BY - Get the maximum age of all users with specific first name
SELECT first_name, MAX(age) AS max_age from user GROUP BY first_name;
# Result
John 18
Rick 19
Harsh 20
Tajwinder 18
# GROUP BY - Get the average age of all users with specific first name
SELECT first_name, AVG(age) AS avg_age from user GROUP BY first_name;
# Result
John 17.0000
Rick 19.0000
Harsh 20.0000
Tajwinder 18.0000
W ten sposób możemy użyć klauzuli GROUP BY z funkcjami agregacji i bez nich, aby pogrupować wiersze tabeli dla określonych kolumn.