sql - Big Query - 将数组转置为列
问题描述
我们在 Big Query 中有一个表,如下所示。
输入表:
Name | Interests
-----+----------
Bob | ["a"]
Sue | ["a","b"]
Joe | ["b","c"]
我们希望将上表转换为以下格式,以使其对 BI/Visualisation 友好。
目标/所需表:
+------------------+
| Name | a | b | c |
+------------------+
| Bob | 1 | 0 | 0 |
| Sue | 1 | 1 | 0 |
| Joe | 0 | 1 | 0 |
+------------------+
注意:兴趣列是数组数据类型。Big Query 中是否可以进行这种转换?如果是,任何参考查询?
提前致谢!
解决方案
以下是 BigQuery 标准 SQL 并使用 BQ 的脚本功能
#standardSQL
create temp table ttt as (
select name, interest
from `project.dataset.table`,
unnest(interests) interest
);
EXECUTE IMMEDIATE (
SELECT """
SELECT name, """ ||
STRING_AGG("""MAX(IF(interest = '""" || interest || """', 1, 0)) AS """ || interest, ', ')
|| """
FROM ttt
GROUP BY name
"""
FROM (
SELECT DISTINCT interest
FROM ttt
ORDER BY interest
)
);
如果适用于您的问题的样本数据 - 输出是
推荐阅读
- elixir - 凤凰无效的CSRF
- java - 使用 servlet 上下文从 Spring Boot 应用程序获取资源的路径
- javascript - 异步操作完成后如何退出节点脚本?
- applescript - 从处理应用程序的 finder 中轮询选择
- amazon-web-services - 用于自动扩展的 AWS Codestar 设置 Beanstalk 策略错误
- php - 从重复的 Wordpress 元框创建和显示内容
- android - 即使应用程序在前台运行,onNotificationPosted 方法也不会被调用
- python - Python:虽然不是异常
- assembly - 源和目标的大小必须相同 (8086)
- c - C - 使用数组打印从 1 到 100 的所有素数