mysql - 如何在 BigQuery/SQL 中将行转置为具有大量数据的列?

标签 mysql sql sql-server google-bigquery transpose

我在将 BigQuery 中的大量数据表(15 亿行)从行转换为列时遇到问题。我可以弄清楚如何在硬编码时使用少量数据来做到这一点,但是有这么大的数据量。该表的快照如下所示:

+------------------------+ | CustomerID 特征值 | +--------------------------+ | 1 A123 3 | | 1 F213 7 | | 1 F231 8 | | 1 B789 9.1 | | 2 A123 4 | | 2 U123 4 | | 2 B789 12 | | .. .. | | .. .. | | 400000 A123 8 | | 400000 U123 7 | | 400000 R231 6 | +------------------------+

所以基本上有大约 400,000 个不同的 customerID 和 3000 个特征,并不是每个 customerID 都具有相同的特征,所以一些 customerID 可能有 2000 个特征而有些有 3000 个。我想要得到的最终结果表是每一行呈现一个不同的 customerID,并具有 3000 列来呈现所有功能。像这样:

CustomerID Feature1 Feature2 ... Feature3000

所以有些单元格可能有缺失值。

有人知道如何在 BigQuery 或 SQL 中执行此操作吗?

提前致谢。

最佳答案

STEP #1

在下面的查询中,将 yourTable 替换为您表的真实名称并执行/运行它

SELECT 'SELECT CustomerID, ' + 
   GROUP_CONCAT_UNQUOTED(
      'MAX(IF(Feature = "' + STRING(Feature) + '", Value, NULL))'
   ) 
   + ' FROM yourTable GROUP BY CustomerID'
FROM (SELECT Feature FROM yourTable GROUP BY Feature) 

因此,您将获得一些要在下一步中使用的字符串!

STEP #2

获取从第 1 步获得的字符串并将其作为查询执行
输出是您在问题中询问的 Pivot

关于mysql - 如何在 BigQuery/SQL 中将行转置为具有大量数据的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34798244/

相关文章:

Java JTable 日期格式问题

sql - 在动态查询中替换列名

mysql - SQL 仅选择列上具有最大值的行

mysql - 请求MySQL中的请求结果?

php - 如何将动态构造的 ext/mysql 查询转换为 PDO 准备语句?

sql - 选择 SQL 表中重复记录的最大数量

sql-server - 如何将 LocalDB 添加到 Visual Studio 2015 Community 的 SQL Server 对象资源管理器?

php - 教义2 : SUM on left join query

java - Hibernate MS SQL 连接

sql - 一对多关系的最大约束 - Oracle SQL