Keputusan Pertanyaan MySQL PIVOT dengan GROUP BY
Masalah:
Mengubah jadual pangkalan data kepada paparkan baris sebagai lajur, mengumpulkan data dengan kunci yang ditentukan (cth., cap masa) sambil memastikan semua nilai data untuk setiap kunci dibentangkan dalam lajur yang sepadan.
Pertanyaan Cadangan:
SELECT d.data_timestamp,
SUM(IF(data_id = 1, data_value, 0)) AS 'input_1',
SUM(IF(data_id = 2, data_value, 0)) AS 'input_2',
...
SUM(IF(data_id = 20, data_value, 0)) AS 'input_20'
FROM data
GROUP BY d.data_timestamp
ORDER BY d.data_timestamp ASC
Salin selepas log masuk
Penjelasan:
- Pertanyaan luar memilih cap masa data yang berbeza daripada jadual data.
- Untuk setiap cap masa data, pertanyaan mengira jumlah nilai data untuk setiap data_id menggunakan fungsi IF() di dalam agregat SUM().
- Jika data_id sepadan dengan id yang diingini (cth., 1 untuk input_1), nilai data yang sepadan ditambah pada jumlah ; jika tidak, 0 ditambah.
- Pengiraan ini diulang untuk setiap data_id sehingga 20, mewujudkan lajur untuk setiap data_id yang berbeza.
- Hasil akhir dikumpulkan mengikut cap masa data dan disusun dalam menaik pesanan.
Batasan:
- Pendekatan ini memerlukan jumlah eksplisit untuk setiap data_id dalam pertanyaan, yang mungkin tidak dapat dilaksanakan jika terdapat bilangan id yang besar.
- Pendekatan alternatif yang melibatkan CASE atau JOIN berbilang peringkat boleh digunakan bergantung pada keperluan khusus dan struktur data.
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Keputusan Pertanyaan MySQL dengan ID GROUP BY dan Berbilang Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!