Pertanyaan SQL dengan AVG dan GROUP BY untuk Nilai Pas Berbilang
Anda telah menghadapi kesukaran dalam membuat pertanyaan SQL untuk mendapatkan maklumat tertentu daripada jadual dengan struktur berikut:
+------------+--------------+----------------+ | id | pass | val | +------------+--------------+----------------+ | DA02959106 | 5.0000000000 | 44.4007000000 | | 08A5969201 | 1.0000000000 | 182.4100000000 | | 08A5969201 | 2.0000000000 | 138.7880000000 | ...
Matlamat anda adalah untuk menjana pertanyaan yang mengekstrak maklumat berikut:
id, AVG of 'val' for 'pass' = 1, AVG of 'val' for 'pass' = 2, etc
Output yang diingini sepatutnya menyerupai:
+------------+---------+---------+---------+---------+---------+---------+---------+ | id | val_1 | val_2 | val_3 | val_4 | val_5 | val_6 | val_7 | +------------+---------+---------+---------+---------+---------+---------+---------+ | DA02959106 | 186.147 | 148.266 | 111.905 | 76.3985 | 44.4007 | 0 | 0 | +------------+---------+---------+---------+---------+---------+---------+---------+
Penyelesaian 1: Pendekatan Langsung
Untuk mencapai matlamat ini, anda boleh menggunakan pertanyaan berikut:
SELECT id, pass, AVG(val) AS val_1 FROM data_r1 GROUP BY id, pass;
Pertanyaan ini mengira nilai purata bagi setiap gabungan unik id dan lulus.
Penyelesaian 2: Pengagregatan Bersyarat
Jika anda lebih suka mempunyai hanya satu baris untuk setiap id, anda boleh menggunakan pertanyaan ini:
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, ... from data_r1 d1 GROUP BY d1.id
Pertanyaan ini menggunakan pengagregatan bersyarat untuk mengira nilai purata bagi nilai lulus yang berbeza dalam setiap id.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Nilai Purata untuk Nilai Lulus Berbeza dalam Pertanyaan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!