Bagaimanakah anda boleh menggunakan `AVG` dan `GROUP BY` dalam MySQL untuk mengira berbilang purata lajur bagi kumpulan berbeza dalam jadual?

Susan Sarandon
Lepaskan: 2024-10-27 11:56:02
asal
424 orang telah melayarinya

How can you use  `AVG` and `GROUP BY` in MySQL to calculate multiple averages of a column for different groups within a table?

Pertanyaan SQL dengan AVG dan Kumpulan Oleh

Dalam MySQL, pertanyaan yang mengekstrak berbilang purata lajur untuk kumpulan berbeza dalam jadual boleh dicapai menggunakan gabungan klausa AVG() dan GROUP BY. Pertimbangkan data_r1 jadual dengan struktur berikut:

mysql> select id, pass, val from data_r1 limit 10;
+------------+--------------+----------------+
| id         | pass         | val            |
+------------+--------------+----------------+
| DA02959106 | 5.0000000000 | 44.4007000000 |
| 08A5969201 | 1.0000000000 | 182.4100000000 |
| 08A5969201 | 2.0000000000 | 138.7880000000 |
| DA02882103 | 5.0000000000 | 44.7265000000 |
| DA02959106 | 1.0000000000 | 186.1470000000 |
| DA02959106 | 2.0000000000 | 148.2660000000 |
| DA02959106 | 3.0000000000 | 111.9050000000 |
| DA02959106 | 4.0000000000 | 76.1485000000 |
| DA02959106 | 5.0000000000 | 44.4007000000 |
| DA02959106 | 4.0000000000 | 76.6485000000 |
Salin selepas log masuk

Untuk mengekstrak maklumat yang dikehendaki daripada jadual ini, gunakan pertanyaan berikut:

SELECT id, pass, AVG(val) AS val
FROM data_r1
GROUP BY id, pass;
Salin selepas log masuk

Pertanyaan ini mengumpulkan baris dalam jadual data_r1 oleh kedua-dua lajur id dan pas, dan kemudian mengira nilai purata lajur val untuk setiap kumpulan. Hasilnya ialah jadual dengan satu baris untuk setiap gabungan unik id dan pas, dengan nilai purata yang sepadan untuk val.

Pertanyaan alternatif, yang mencapai hasil yang sama tetapi mengembalikan satu baris untuk setiap id unik dengan nilai purata berbilang:

SELECT d1.id,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 1) as val_1,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 2) as val_2,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 3) as val_3,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 4) as val_4,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 5) as val_5,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 6) as val_6,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 7) as val_7
FROM data_r1 d1
GROUP BY d1.id
Salin selepas log masuk

Pertanyaan ini menggunakan subkueri bersarang untuk mengira nilai purata bagi setiap nilai lulus dalam kumpulan id tertentu. Fungsi IFNULL() digunakan untuk memastikan bahawa nilai nol digantikan dengan 0, menghalang pembahagian dengan ralat sifar.

Atas ialah kandungan terperinci Bagaimanakah anda boleh menggunakan `AVG` dan `GROUP BY` dalam MySQL untuk mengira berbilang purata lajur bagi kumpulan berbeza dalam jadual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!