MYSQL,动态行到列

标签 mysql pivot-table

<分区>

我有一个表 user 看起来像这样(涉及更多列)

user_id | user_name |
1       |   adam    |
2       |   berta   |
3       |   caesar  |

看起来像这样的桌面产品

product_id | product_name |
1          |   product 1  |
2          |   product 2  |
3          |   product 3  |
4          |   product 4  |

和一个表 u_p 引用允许用户使用的产品

u_p_id  | u_p_user  | u_p_prod  |
1       |   1       |   1       |
2       |   1       |   2       |
3       |   2       |   3       |

其中 u_p_user 和 u_p_prod 分别是 user_id 的外键。 product_id。

我想要的是:

user_id | user_name | u_p_prod=1 | u_p_prod=2 | u_p_prod=3 | u_p_prod=4 |
1       |   adam    | 1          | 1          | 0          | 0          |
2       |   berta   | 0          | 0          | 1          | 0          |
3       |   caesar  | 0          | 0          | 0          | 0          |

当然,用户和产品必须是动态的。

如何在 mySQL 中完成此操作?

最佳答案

这通常称为枢轴。如果不对每个不同值的一列进行硬编码,就无法进行数据透视。这意味着您需要在编写 SQL 查询之前知道一组不同的值。

SELECT u.user_id, u.user_name,
  COALESCE(MAX(IF(u_p.prod=1, 1, 0), 0) AS `u_p_prod=1`,
  COALESCE(MAX(IF(u_p.prod=2, 1, 0), 0) AS `u_p_prod=2`,
  COALESCE(MAX(IF(u_p.prod=3, 1, 0), 0) AS `u_p_prod=3`,
  COALESCE(MAX(IF(u_p.prod=4, 1, 0), 0) AS `u_p_prod=4`
FROM user AS u
LEFT OUTER JOIN u_p ON u.user_id = u_p.u_p_user
GROUP BY u.user_id;

关于MYSQL,动态行到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43721650/

相关文章:

mysql - 进行 MySQL 查询时是否需要将表链接在一起?

excel - 在 Excel 中进行数据透视而不进行聚合,以显示文本而不是数字?

mysql - 动态数据透视表列 mysql

python - Pandas 数据透视表最近邻

excel - 带有 VBA 的动态 COUNTIF 矩阵

mysql - SQL:一张表,不同的列名?

mysql, sql 仅在找到记录时更新

mysql - MySQL 中的聚合函数 GROUP_CONCAT(expr)

php - 我如何定义 if 条件来检查 array_key 长度是否=13?

Python Pandas : pivot_table count for multiple columns on same level?