【问题标题】:SQL: Create a pivot tableSQL:创建数据透视表
【发布时间】:2022-01-03 00:28:46
【问题描述】:
我有一个如下所示的表格:
| category |
feature_a |
feature_b |
| top20 |
3 |
5 |
| top10 |
2 |
6 |
| top10 |
1 |
7 |
| top20 |
4 |
8 |
我要做的是创建一个如下所示的数据透视表:
| features |
top20 |
top10 |
| feature_a |
7 |
3 |
| feature_b |
13 |
13 |
第二个表中的每个值都是每个类别的每个特征的总和。我正在阅读数据透视表here 上的文档,但这对我需要得到的东西没有帮助。知道如何实现吗? (注:“pivot”功能我不必使用,如果可以通过其他功能实现)
【问题讨论】:
标签:
sql
database
google-bigquery
bq
【解决方案1】:
您可以使用 UNION 合并 2 个数据透视表,例如:
SELECT
'feature_a' "FEATURE",
SUM(CASE WHEN category = 'top10' THEN feature_a ELSE 0 END) "TOP10",
SUM(CASE WHEN category = 'top20' THEN feature_a ELSE 0 END) "TOP20"
FROM bigdata
UNION
SELECT
'feature_b' "FEATURE",
SUM(CASE WHEN category = 'top10' THEN feature_b ELSE 0 END) "TOP10",
SUM(CASE WHEN category = 'top20' THEN feature_b ELSE 0 END) "TOP20"
FROM bigdata;
Pivot fiddle
【解决方案2】:
下面是要走的路:
select * from (
select * from your_table
unpivot (value for features in (feature_a, feature_b))
)
pivot (sum(value) for category in ('top20', 'top10'))
如果应用于我们问题中的样本数据 - 输出是