Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah anda boleh menggunakan GROUP BY untuk Pivot Data dalam MySQL?

Bagaimanakah anda boleh menggunakan GROUP BY untuk Pivot Data dalam MySQL?

Barbara Streisand
Barbara Streisandasal
2024-11-08 13:48:02812semak imbas

How can you use GROUP BY to Pivot Data in MySQL?

Pivoting Query Results Menggunakan MySQL GROUP BY

Dalam pangkalan data hubungan, data pivoting merujuk kepada penyusunan semula baris dan lajur untuk meningkatkan visualisasi data . Di sini, kami menghampiri cabaran biasa: menukar data daripada berasaskan baris kepada berasaskan lajur menggunakan GROUP BY.

Pertanyaan

Untuk memutar data, kami boleh menggunakan GROUP Klausa BY bersama-sama dengan fungsi pengagregatan bersyarat, seperti SUM atau CASE. Mari kita pertimbangkan pertanyaan berikut:


PILIH
d.data_timestamp,
SUM(CASE WHEN data_id = 1 THEN data_value ELSE 0 END) SEBAGAI 'input_1',
JUMLAH(KES APABILA data_id = 2 KEMUDIAN nilai_data LAIN 0 TAMAT) SEBAGAI 'input_2'
DARI
data
KUMPULAN OLEH
d.data_timestamp
ORDER BY
ASC;data_timestamp

Penjelasan

  • Pertanyaan mendapatkan semula nilai data_timestamp unik daripada jadual data dan mengumpulkan hasilnya mengikut data_timestamp.
  • Dalam setiap kumpulan, ia mengira jumlah data_nilai untuk data_id yang sepadan (cth., input_1 untuk data_id = 1).
  • Fungsi SUM() mengendalikan nilai yang tiada dengan melalaikan kepada 0 untuk nilai NULL.
  • Output pertanyaan dibentangkan dalam format lajur, dengan setiap cap_masa data dikaitkan dengan jumlah nilai_data untuk id_data yang ditentukan.

Pendekatan Alternatif

MySQL juga menawarkan kaedah alternatif untuk memutar data. Pendekatan ini termasuk menggunakan fungsi IF() atau cantuman berbilang peringkat.

Fungsi IF()


PILIH
d. cap_masa,
JUMLAH(JIKA(id_data = 1, nilai_data, 0)) SEBAGAI 'input_1',
JUMLAH(JIKA(id_data = 2, nilai_data, 0)) SEBAGAI 'input_2'
DARI
data
KUMPULAN OLEH
d.data_timestamp
ORDER BY
d.data_timestamp ASC;

Berbilang Peringkat Sertaan


PILIH
d.data_timestamp,
d01.data_value AS 'input_1',
d02.data_value AS 'input_2'
FROM
🎜>

SELECT DISTINCT d.data_timestamp
FROM data
) AS d

KIRI SERTAI
data AS d01
HIDUP
d01.data_timestamp = d.data_timestamp DAN d01.data_id = 1
KIRI SERTAI
data AS d02
ON
d02.data_timestamp = d.data_timestamp AND d02.data_id = 2
ORDER BY
d.data_timestamp ASC;

Kesimpulan

Klausa GROUP BY MySQL menyediakan mekanisme yang berkuasa untuk memutarkan hasil pertanyaan. Teknik gabungan CASE, IF(), dan pelbagai peringkat menawarkan fleksibiliti dalam mengendalikan data dan menampung pelbagai struktur data. Memilih pendekatan optimum bergantung pada keperluan khusus dan pertimbangan prestasi.

Atas ialah kandungan terperinci Bagaimanakah anda boleh menggunakan GROUP BY untuk Pivot Data dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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