Pertanyaan SQL dengan AVG dan GROUP BY
Dalam SQL, anda mungkin menghadapi situasi di mana anda perlu mengekstrak purata berkumpulan daripada jadual. Ini boleh dicapai menggunakan klausa AVG() dan GROUP BY.
Pertimbangkan jadual contoh:
id | pass | val |
---|---|---|
DA02959106 | 5.00 | 44.40 |
08A5969201 | 1.00 | 182.41 |
08A5969201 | 2.00 | 138.78 |
DA02882103 | 5.00 | 44.73 |
DA02959106 | 1.00 | 186.15 |
DA02959106 | 2.00 | 148.27 |
DA02959106 | 3.00 | 111.91 |
DA02959106 | 4.00 | 76.15 |
DA02959106 | 5.00 | 44.40 |
DA02959106 | 4.00 | 76.65 |
Mengira Nilai Purata untuk Setiap Pas
Untuk mengira nilai purata bagi setiap 'lulus' bagi 'id' yang sama, gunakan pertanyaan berikut:
<code class="sql">SELECT id, pass, AVG(val) AS val_1 FROM data_r1 GROUP BY id, pass;</code>
Pertanyaan ini mengumpulkan baris mengikut 'id' dan 'lulus' serta mengira purata 'val' bagi setiap kumpulan. Hasilnya ialah:
id | pass | val_1 |
---|---|---|
DA02959106 | 1.00 | 186.15 |
08A5969201 | 1.00 | 182.41 |
DA02882103 | 5.00 | 44.73 |
08A5969201 | 2.00 | 138.78 |
DA02959106 | 2.00 | 148.27 |
DA02959106 | 3.00 | 111.91 |
DA02959106 | 4.00 | 76.40 |
DA02959106 | 5.00 | 44.40 |
Mengasingkan Data untuk Satu Baris setiap ID
Jika anda lebih suka mempunyai satu baris setiap 'id' dengan berbilang lajur yang mewakili nilai purata bagi setiap 'lulus', gunakan pertanyaan berikut:
<code class="sql">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;</code>
Pertanyaan ini menggunakan subkueri untuk mengekstrak nilai purata bagi setiap 'lulus' dan memberikannya kepada lajur yang sepadan. Jadual yang terhasil ialah:
id | val_1 | val_2 | val_3 | val_4 | val_5 | val_6 | val_7 |
---|---|---|---|---|---|---|---|
DA02959106 | 186.15 | 148.27 | 111.91 | 76.40 | 44.40 | 0 | 0 |
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengira nilai purata untuk setiap \'pass\' untuk \'id\' yang sama dan memutar data untuk satu baris setiap \'id\' dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!