Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengubah Keputusan Pertanyaan dalam MySQL Menggunakan GROUP BY?

Bagaimana untuk Mengubah Keputusan Pertanyaan dalam MySQL Menggunakan GROUP BY?

Linda Hamilton
Linda Hamiltonasal
2024-11-15 10:46:02878semak imbas

How to Pivot Query Results in MySQL Using GROUP BY?

Hasil Pertanyaan PIVOT MySQL dengan GROUP BY

Objektif

Ubah baris kepada lajur dalam jadual MySQL menggunakan teknik PIVOT atau GROUP BY.

Latar Belakang

PIVOT, teknik transformasi data, menyusun semula data baris ke dalam lajur. Dalam kes ini, matlamatnya ialah untuk mengumpulkan data mengikut lajur tertentu, seperti cap masa dan memaparkan setiap nilai data sebagai lajur yang berasingan.

Menggunakan Penyata KES

Sebaliknya sintaks PIVOT tradisional , yang tidak disokong secara meluas dalam MySQL, fungsi SUM() boleh digunakan bersama dengan pernyataan CASE untuk mencapai hasil yang diingini.

<code class="sql">SELECT d.data_timestamp
     , SUM(CASE WHEN data_id = 1 THEN data_value ELSE 0 END) AS 'input_1'
     , SUM(CASE WHEN data_id = 2 THEN data_value ELSE 0 END) AS 'input_2'
     ...
     , SUM(CASE WHEN data_id = 20 THEN data_value ELSE 0 END) AS 'input_20'
FROM data
GROUP BY data_timestamp
ORDER BY data_timestamp ASC</code>

Menggunakan Penyata IF

Sebagai alternatif, pernyataan IF boleh digunakan dalam fungsi SUM() untuk mencapai hasil yang sama.

<code class="sql">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 data_timestamp
ORDER BY data_timestamp ASC</code>

Menggunakan Berbilang Penyata JOIN

Pendekatan lain ialah menggunakan berbilang pernyataan JOIN untuk mencipta output yang diingini.

<code class="sql">SELECT d.data_timestamp
     , d01.data_value AS 'input_1'
     , d02.data_value AS 'input_2'
     ...
     , d20.data_value AS 'input_20'
FROM
  (SELECT DISTINCT d.data_timestamp
    FROM data
  ) AS d
  LEFT JOIN data AS d01
    ON d01.data_timestamp = d.data_timestamp
    AND d01.data_id = 1
  LEFT JOIN data AS d02
    ON d02.data_timestamp = d.data_timestamp
    AND d02.data_id = 2
  ...                                   --- 20 JOINs
  LEFT JOIN data AS d20
    ON d20.data_timestamp = d.data_timestamp
    AND d20.data_id = 20
ORDER BY d.data_timestamp ASC</code>

Dengan menggunakan teknik ini, anda boleh dengan mudah memutar hasil pertanyaan dalam MySQL menggunakan GROUP BY.

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Keputusan Pertanyaan dalam MySQL Menggunakan GROUP BY?. 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