MySQL 中的交叉表或数据透视查询允许您将数据(通常从面向行的结构)转换为面向专栏的,有利于更轻松的分析和演示。要了解如何使用交叉表查询,让我们深入研究一个实际示例。
考虑具有以下结构的表:
app_id transaction_id mobile_no node_id customer_attribute entered_value 100 111 9999999999 1 Q1 2 100 111 9999999999 2 Q2 1 100 111 9999999999 3 Q3 4 100 111 9999999999 4 Q4 3 100 111 9999999999 5 Q5 2 100 222 8888888888 4 Q4 1 100 222 8888888888 3 Q3 2 100 222 8888888888 2 Q2 1 100 222 8888888888 1 Q1 3 100 222 8888888888 5 Q5 4
您想要在下面显示这些记录格式:
app_id transaction_id mobile Q1 Q2 Q3 Q4 | Q5 100 111 9999999999 2 1 4 3 2 100 222 8888888888 3 1 2 1 4
要实现此目的,您可以使用交叉表查询。但是,在最初的尝试中,您为每个数据点检索了多行,这不是所需的结果。
以下调整后的查询将提供所需的结果:
SELECT app_id, transaction_id, mobile_no, MAX(CASE WHEN node_id = 1 THEN entered_value END) AS Q1, MAX(CASE WHEN node_id = 2 THEN entered_value END) AS Q2, MAX(CASE WHEN node_id = 3 THEN entered_value END) AS Q3, MAX(CASE WHEN node_id = 4 THEN entered_value END) AS Q4, MAX(CASE WHEN node_id = 5 THEN entered_value END) AS Q5 FROM trn_user_log GROUP BY app_id, transaction_id, mobile_no
您还表达了使用来自customer_attribute 列作为列标题。虽然 NAME_CONST 函数不适合此目的,但您可以利用可能实现所需结果的技术。但是,请进一步说明您想要的结果,以便获得精确的解决方案。
以上是如何创建 MySQL 交叉表查询以将数据从行转换为列?的详细内容。更多信息请关注PHP中文网其他相关文章!