首页 >数据库 >mysql教程 >如何使用'CASE”或'IF”语句在 MySQL 中透视数据?

如何使用'CASE”或'IF”语句在 MySQL 中透视数据?

Linda Hamilton
Linda Hamilton原创
2024-11-09 10:05:02237浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn