使用 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>
说明
替代方法
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中文网其他相关文章!