使用GROUP BY 以透視格式顯示資料
目前的任務涉及將包含代表各個資料點的行的關聯式資料庫表轉換為資料透視格式,其中資料根據時間戳記組織成列,值按特定標識符分組。
為了實現這個資料透視結構,我們可以在 MySQL 中使用 CASE 語句。此語句允許我們根據不同的條件有條件地分配值:
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
在此查詢中,我們使用 SUM 函數來聚合每個不同 data_timestamp 的 data_value。 CASE 語句檢查 data_id 是否與特定值(例如 1、2 或 20)相符。如果匹配,則相應的 data_value 將包含在相應列的求和中(例如,input_1、input_2、input_20)。如果未找到匹配項,則在計算中使用零。這會產生一個表,其中 data_timestamp 是行標識符,每個 data_id 都有一個專用列顯示其對應的聚合 data_value。
我們也可以使用IF 語句而不是CASE 來達到相同的目的:
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
CASE 和IF 方法都允許我們動態產生必要的列並根據data_id 和data_timestamp 聚合值,最終以所需的資料透視格式呈現資料。
以上是如何使用「CASE」或「IF」語句在 MySQL 中透視資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!