Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menggunakan Fungsi Agregat (SUM, AVG, MAX, MIN, COUNT, DISTINCT) di MySQL

Kami sering diminta untuk melakukan perhitungan pada beberapa baris untuk mendapatkan data untuk tujuan pelaporan, statistik dan analitis. Dalam kasus seperti itu, fungsi agregasi yang tersedia di MySQL sangat berguna dan kita harus sadar menggunakan fungsi ini untuk mengambil data yang diinginkan. Fungsi-fungsi ini termasuk SUM, AVG, MAX, MIN, COUNT, dan DISTINCT.

Bagian selanjutnya dari tutorial ini menjelaskan penggunaan fungsi agregasi ini.

Data Uji

Anda dapat menggunakan kueri yang disebutkan di bawah ini untuk menyiapkan data pengujian untuk mengikuti bagian berikutnya. Buat database dan tabel sekolah (pengguna dan skor) untuk memahami fungsi agregasi.

# 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`));

Sekarang tambahkan data uji ke tabel pengguna seperti yang ditunjukkan di bawah ini.

# 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 );

Kueri di atas menyisipkan 5 pengguna untuk bagian 1 dan 2. Selain itu, masukkan data skor menggunakan kueri seperti yang ditunjukkan di bawah ini.

# 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');

Kami telah memasukkan skor siswa aktif. Juga, perhatikan bahwa skor untuk siswa dengan id 1 dan 2 ditambahkan untuk bagian 1 untuk semua 3 mata pelajaran. Kueri di atas juga memasukkan data skor siswa dengan id 3 untuk bagian 1 dan 2. Siswa yang memiliki id 4 mendapatkan data skor untuk bagian 2. Sekarang kita memiliki data tes yang baik untuk mulai mempelajari fungsi agregat.

SUM

Bagian ini menjelaskan penggunaan jumlah fungsi agregat untuk mendapatkan skor berdasarkan bagian dari pengguna untuk mendapatkan skor total semua mata pelajaran untuk semua bagian seperti yang ditunjukkan di bawah ini.

# 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

Hasil kueri di atas dapat digunakan untuk menyajikan laporan yang menunjukkan skor total semua pengguna untuk setiap bagian yang telah mereka pelajari di sekolah.

AVG

Fungsi agregat AVG dapat digunakan untuk mendapatkan nilai rata-rata kolom yang memenuhi syarat untuk agregasi berdasarkan ketentuan WHERE dan pengelompokan yang kami terapkan.

Kita dapat memperoleh nilai rata-rata per bagian dalam setiap mata pelajaran seperti yang ditunjukkan di bawah ini.

# 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

Sekarang kita dapat menggunakan data di atas untuk menghasilkan laporan yang menunjukkan skor rata-rata yang diperoleh pengguna untuk setiap bagian.

MAX

Fungsi agregat MAX dapat digunakan untuk mengetahui nilai maksimum kolom yang memenuhi syarat untuk agregasi berdasarkan kondisi WHERE dan pengelompokan yang diterapkan oleh kami.

Kita dapat memperoleh nilai maksimum per bagian dalam setiap mata pelajaran seperti yang ditunjukkan di bawah ini.

# 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

Fungsi agregat MIN dapat digunakan untuk mengetahui nilai minimum kolom yang memenuhi syarat untuk agregasi berdasarkan kondisi WHERE dan pengelompokan yang diterapkan oleh kami.

Kita dapat memperoleh nilai minimum per bagian dalam setiap mata pelajaran seperti yang ditunjukkan di bawah ini.

# 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

JUMLAH

Fungsi agregat COUNT dapat digunakan untuk mendapatkan jumlah total nilai dalam kolom yang ditentukan.

Dengan menggunakan data pengujian, kita bisa mendapatkan total pengguna aktif berdasarkan bagian seperti yang ditunjukkan di bawah ini.

# 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

BERBEDA

Kita dapat menggunakan kata kunci DISTINCT untuk menghilangkan catatan duplikat. Dalam skenario kami, kami bisa mendapatkan data pengguna yang memperoleh skor untuk setidaknya satu subjek menggunakan kueri seperti yang ditunjukkan di bawah ini.

# 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

Kita dapat melihat bahwa pengguna tidak aktif yang tidak mencetak skor sekalipun dihilangkan dari hasil kueri.

Ini adalah bagaimana kita dapat menggunakan fungsi agregat untuk mendapatkan data untuk tujuan pelaporan dan analisis. Fungsi-fungsi ini juga penting bagi aktivitas manajerial untuk mengambil keputusan organisasi menggunakan data yang terakumulasi dari waktu ke waktu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana mengelola pengguna dan otentikasi di MySQL

  2. Bagaimana Fungsi LTRIM() Bekerja di MySQL

  3. Cara mengimpor file excel ke database MySQL

  4. MySQL Query - Catatan antara Hari Ini dan 30 Hari Terakhir

  5. Bisakah saya menggunakan kembali bidang terhitung dalam kueri SELECT?