如何使用 GROUP BY 在 MySQL 中透视数据?

Barbara Streisand
发布: 2024-11-08 13:48:02
原创
793 人浏览过

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

使用 MySQL GROUP BY 透视查询结果

在关系数据库中,透视数据是指重新排列行和列以增强数据可视化。在这里,我们面临一个常见的挑战:使用 GROUP BY 将数据从基于行的数据转换为基于列的数据。

查询

要透视数据,我们可以使用 GROUP BY 子句以及条件聚合函数,例如 SUM 或 CASE。让我们考虑以下查询:

<br>SELECT<br> d.data_timestamp,<br> SUM(CASE WHEN data_id = 1 THEN data_value ELSE 0 END) AS 'input_1',<br> SUM(当 data_id = 2 时则 data_value ELSE 0 END) AS 'input_2'<br>FROM<br> 数据<br>GROUP BY<br> d.data_timestamp<br>ORDER BY<br> d.data_timestamp ASC;<br>

说明

登录后复制
  • 查询从数据表中检索唯一的 data_timestamp 值,并按 data_timestamp 对结果进行分组。
  • 在每个组中,它计算 data_values 的总和相应的 data_id(例如,data_id = 1 的 input_1)。
  • SUM() 函数通过默认为 NULL 值 0 来处理缺失值。
  • 查询的输出以柱状形式呈现格式,每个 data_timestamp 与指定的 data_values 总和相关联data_id.

替代方法

MySQL 还提供了用于旋转数据的替代方法。这些方法包括使用 IF() 函数或多级连接。

IF() 函数

<br>SELECT<br> d. data_timestamp,<br> SUM(IF(data_id = 1, data_value, 0)) AS 'input_1',<br> SUM(IF(data_id = 2, data_value, 0)) AS 'input_2'<br>FROM<br> 数据<br>GROUP BY<br> d.data_timestamp<br>ORDER BY<br> d.data_timestamp ASC;<br>

多级连接

<br>SELECT<br> d.data_timestamp,<br> d01.data_value AS 'input_1',<br> d02.data_value AS 'input_2'<br>FROM<br> (<pre class="brush:php;toolbar:false">SELECT DISTINCT d.data_timestamp
FROM data
登录后复制

) AS d
LEFT JOIN
数据 AS d01
ON
d01.data_timestamp = d .data_timestamp AND d01.data_id = 1
LEFT JOIN
数据 AS d02
ON
d02.data_timestamp = d.data_timestamp AND d02.data_id = 2
ORDER BY
d.data_timestamp ASC;

结论

MySQL 的 GROUP BY 子句提供了强大的旋转查询结果的机制。 CASE、IF() 和多级连接技术提供了处理数据和适应各种数据结构的灵活性。选择最佳方法取决于具体要求和性能考虑。

以上是如何使用 GROUP BY 在 MySQL 中透视数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板