Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengira Nilai Purata untuk Nilai Lulus Berbeza dalam Pertanyaan SQL?

Bagaimana untuk Mengira Nilai Purata untuk Nilai Lulus Berbeza dalam Pertanyaan SQL?

Linda Hamilton
Lepaskan: 2024-10-26 03:03:27
asal
892 orang telah melayarinya

How to Calculate Average Values for Different Pass Values in a SQL Query?

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 |
...
Salin selepas log masuk

Matlamat anda adalah untuk menjana pertanyaan yang mengekstrak maklumat berikut:

id, AVG of 'val' for 'pass' = 1, AVG of 'val' for 'pass' = 2, etc
Salin selepas log masuk

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       |
+------------+---------+---------+---------+---------+---------+---------+---------+
Salin selepas log masuk

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;
Salin selepas log masuk

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
Salin selepas log masuk

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!

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