sql >> Databasteknik >  >> RDS >> Mysql

Använda aggregerade funktioner (SUM, AVG, MAX, MIN, COUNT, DISTINCT) i MySQL

Vi krävde ofta att utföra beräkningar på flera rader för att få data för rapportering, statistiska och analytiska ändamål. I sådana fall är aggregeringsfunktionerna tillgängliga i MySQL praktiska och vi måste vara medvetna om att använda dessa funktioner för att hämta önskad data. Dessa funktioner inkluderar SUMMA, AVG, MAX, MIN, COUNT och DISTINCT.

Resten av avsnittet i denna handledning förklarar användningen av dessa aggregeringsfunktioner.

Testdata

Du kan använda de nedan nämnda frågorna för att förbereda testdata för att följa de efterföljande avsnitten. Skapa skolans databas och tabeller (användare och poäng) för att förstå aggregeringsfunktionerna.

# Create the database
CREATE SCHEMA `school` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

# Create the user table
CREATE TABLE `school`.`user` (
`user_id` BIGINT NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(45) NOT NULL,
`last_name` VARCHAR(45) NULL,
`section` SMALLINT(6) NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`user_id`));

# Create the score table
CREATE TABLE `school`.`score` (
`score_id` BIGINT NOT NULL AUTO_INCREMENT,
`user_id` BIGINT NOT NULL,
`section` SMALLINT(6) NOT NULL DEFAULT 1,
`subject` VARCHAR(45) NOT NULL,
`score` SMALLINT(6) NOT NULL DEFAULT 0,
PRIMARY KEY (`score_id`));

Lägg nu till testdata i användartabellen enligt nedan.

# User data
INSERT INTO `user` ( `user_id`, `first_name`, `last_name`, `section`, `active` ) VALUES
( 1, 'John', 'Smith', 1, 1 ),
( 2, 'Rick', 'Jones', 1, 1 ),
( 3, 'Catherine', 'Ponting', 2, 1 ),
( 4, 'Harsh', 'Upadhyay', 2, 1 ),
( 5, 'Tajwinder', 'Singh', 2, 0 );

Ovanstående fråga infogar 5 användare för avsnitt 1 och 2. Infoga även poängdata med hjälp av frågan som visas nedan.

# Score data
INSERT INTO `school`.`score` (`score_id`, `user_id`, `section`, `subject`, `score`) VALUES
('1', '1', '1', 'Maths', '86'),
('2', '1', '1', 'Physics', '75'),
('3', '1', '1', 'Chemistry', '90'),
('4', '2', '1', 'Maths', '64'),
('5', '2', '1', 'Physics', '98'),
('6', '2', '1', 'Chemistry', '56'),
('7', '3', '1', 'Maths', '48'),
('8', '3', '1', 'Physics', '69'),
('9', '3', '1', 'Chemistry', '54'),
('10', '3', '2', 'Maths', '82'),
('11', '3', '2', 'Physics', '85'),
('12', '3', '2', 'Chemistry', '91'),
('13', '4', '2', 'Maths', '65'),
('14', '4', '2', 'Physics', '74'),
('15', '4', '2', 'Chemistry', '84');

Vi har infogat poängen för de aktiva eleverna. Observera också att poängen för eleven med id 1 och 2 läggs till för sektion 1 för alla 3 ämnen. Ovanstående fråga infogar också poängdata för elev med id 3 för avsnitt 1 och 2. Eleven med ID 4 fick poängdata för avsnitt 2. Nu har vi bra testdata för att börja lära sig de aggregerade funktionerna.

SUMMA

Det här avsnittet förklarar användningen av den sammanlagda funktionssumman för att få användarnas sektionspoäng för att få totalpoängen för alla ämnen för alla sektioner som visas nedan.

# SUM - Total Score of the Users for each section
SELECT `user`.`first_name`, `user`.`last_name`, `score`.`section`, SUM(`score`) AS total_score FROM `user`, `score`
WHERE `user`.`user_id` = `score`.`user_id`
GROUP BY `score`.`user_id`, `score`.`section`;

# Result

first_name last_name section total_score
----------------------------------------------------
John Smith 1 251
Rick Jones 1 218
Catherine Ponting 1 171
Catherine Ponting 2 258
Harsh Upadhyay 2 223

Ovanstående frågeresultat kan användas för att presentera rapporten som visar totalpoängen för alla användare för varje avsnitt de har studerat i skolan.

AVG

Aggregeringsfunktionen AVG kan användas för att få medelvärdet av kolumnerna som är kvalificerade för aggregeringen baserat på WHERE-villkoren och den gruppering som tillämpas av oss.

Vi kan erhålla snittvisa medelbetyg i varje ämne som visas nedan.

# AVG - Section wise average score in each subject
SELECT `score`.`section`, `score`.`subject`, AVG(`score`) AS avg_score FROM `score`
GROUP BY `score`.`section`, `score`.`subject`;

# Result

section subject avg_score
--------------------------------------------
1 Maths 66.0000
1 Physics 80.6667
1 Chemistry 66.6667
2 Maths 73.5000
2 Physics 79.5000
2 Chemistry 87.5000

Nu kan vi använda ovanstående data för att generera rapporten som visar den genomsnittliga poängen som användarna har erhållit för varje avsnitt.

MAX

Den aggregerade funktionen MAX kan användas för att ta reda på det maximala värdet för de kolumner som är kvalificerade för aggregeringen baserat på WHERE-villkoren och den gruppering som tillämpas av oss.

Vi kan få sektionsvis maximala poäng i varje ämne som visas nedan.

# MAX - Section wise maximum score in each subject
SELECT `score`.`section`, `score`.`subject`, MAX(`score`) AS max_score FROM `score`
GROUP BY `score`.`section`, `score`.`subject`;

# Result

section subject max_score
--------------------------------------------
1 Maths 86
1 Physics 98
1 Chemistry 90
2 Maths 82
2 Physics 85
2 Chemistry 91

MIN

Den aggregerade funktionen MIN kan användas för att ta reda på det lägsta värdet för de kolumner som är kvalificerade för aggregeringen baserat på WHERE-villkoren och den gruppering som tillämpas av oss.

Vi kan få de sektionsvisa minimibetygen i varje ämne som visas nedan.

# MIN - Section wise minimum score in each subject
SELECT `score`.`section`, `score`.`subject`, MIN(`score`) AS min_score FROM `score`
GROUP BY `score`.`section`, `score`.`subject`;

# Result

section subject max_score
--------------------------------------------
1 Maths 48
1 Physics 69
1 Chemistry 54
2 Maths 65
2 Physics 74
2 Chemistry 84

ANTAL

Den aggregerade funktionen COUNT kan användas för att få det totala antalet värden i de angivna kolumnerna.

Med hjälp av testdata kan vi få det totala antalet aktiva användare som visas nedan.

# COUNT - Total active users in each section
SELECT `user`.`section`, COUNT(`user_id`) AS active_users FROM `user`
WHERE `user`.`active` = 1
GROUP BY `user`.`section`;

# Result
section active_user
--------------------
1 2
2 2

DISTINKT

Vi kan använda nyckelordet DISTINCT för att utelämna dubbletter av poster. I vårt scenario kan vi få användardata som fick poäng för minst ett ämne med hjälp av frågan som visas nedan.

# DISTINCT - Get list of users who got score
SELECT DISTINCT `user`.`user_id`, `user`.`first_name`, `user`.`last_name` FROM `user`, `score`
WHERE `user`.`user_id` = `score`.`user_id`;

# Result

user_id first_name last_name
--------------------------------------------
1 John Smith
2 Rick Jones
3 Catherine Ponting
4 Harsh Upadhyay

Vi kan se att den inaktiva användaren som inte fick poäng en enda gång utelämnas från frågeresultaten.

Det är så vi kan använda de aggregerade funktionerna för att få fram data för rapporterings- och analysändamål. Dessa funktioner är också viktiga för ledningsaktiviteter för att fatta organisationsbeslut med hjälp av data som samlats över tiden.


  1. kontrollera efter giltigt datum som deklareras i varchar2

  2. Hur man pivoterar dynamiskt med datum som kolumn

  3. Hur man laddar och hanterar data i Microsoft Power BI

  4. Skillnaden mellan ett JDBC-uttalande och ett förberett uttalande