sql >> Databáze >  >> RDS >> Mysql

Seskupit řádky pomocí seskupení podle klauzule v MySQL

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.


  1. PostgreSQL, stav SQL:42601

  2. Vnitřní části sedmi druhů SQL Server – část 2

  3. Naučte se MySQL / MariaDB pro začátečníky – část 1

  4. Jaký typ časového razítka bych si měl vybrat v databázi PostgreSQL?