如何使用「CASE」或「IF」語句在 MySQL 中透視資料?

Linda Hamilton
發布: 2024-11-09 10:05:02
原創
189 人瀏覽過

How to Pivot Data in MySQL Using `CASE` or `IF` Statements?

使用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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板