Tento tutoriál je součástí série Naučte se základní SQL dotazy pomocí MySQL. V tomto tutoriálu probereme SQL dotazy k provedení seskupování řádků tabulky v MySQL pomocí klauzule GROUP BY s agregačními funkcemi. Můžete také sledovat Používání agregačních funkcí (SUM, AVG, MAX, MIN, COUNT, DISTINCT) v MySQL, abyste se naučili agregační funkce.
Seskupit podle dotazu
GROUP BY klauzule lze použít k seskupení řádků tabulky. Lze jej také použít s agregačními funkcemi pro generování zpráv a shromažďování statistických dat.
# GROUP BY - Syntax
SELECT column_1, column_2, ..., [<aggregate function> AS <column>] FROM `table_name` GROUP BY column_1, column_2, ...;
Vysvětlení dotazu
GROUP BY klauzuli lze použít k seskupení řádků určením sloupců, které tvoří sadu řádků.
Můžeme použít agregační funkce k efektivnímu použití klauzule GROUP BY ke generování zpráv a shromažďování statistických dat.
Seskupení lze použít na více sloupců, kde první sloupec bude tvořit primární skupinu a následující sloupce budou tvořit podskupiny.
Příklady
Tato část poskytuje příklady provedení seskupování pomocí klauzule GROUP BY s agregačními funkcemi a bez nich. Pomocí níže uvedeného dotazu vytvořte tabulku uživatelů se sloupci ID, křestní jméno, příjmení, věk a aktivní sloupce pro uložení uživatelských dat.
# 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`));
Níže uvedený dotaz lze použít k vložení testovacích dat do uživatelské tabulky.
# 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 );
Výše zmíněný dotaz vloží do tabulky 5 řádků obsahujících id, jméno, příjmení a aktivní sloupce, které představují 5 různých uživatelů.
Nyní k seskupení řádků použijeme klauzuli GROUP BY bez agregačních funkcí. To lze provést pomocí klauzule GROUP BY v MySQL, jak je uvedeno níže.
# 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
Výše uvedené dotazy vrátily sadu výsledků seskupením řádků pomocí klauzule GROUP BY. Nyní seskupíme řádky pomocí agregační funkce, jak je znázorněno níže.
# 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
Takto můžeme použít klauzuli GROUP BY s agregačními funkcemi a bez nich k seskupení řádků tabulky pro konkrétní sloupce.