mysql – 如何在Google BigQuery中为数千个类别创建虚拟变量列?
作者:互联网
我有一个包含2列的简单表:UserID和Category,每个UserID可以重复几个类别,如下所示:
UserID Category
------ --------
1 A
1 B
2 C
3 A
3 C
3 B
我想“dummify”这个表:即创建一个输出表,每个类别都有一个由虚拟变量组成的唯一列(0/1取决于UserID是否属于该特定类别):
UserID A B C
------ -- -- --
1 1 1 0
2 0 0 1
3 1 1 1
我的问题是我有几百个类别(不仅仅是本例中的3个),所以使用CASE WHEN语句无法有效完成.
所以我的问题是:
1)有没有办法在不使用数千个CASE WHEN语句的情况下“dummify”Google BigQuery中的“类别”列.
2)这是UDF功能运行良好的情况吗?看起来情况确实如此,但我对BigQuery中的UDF不够熟悉以解决这个问题.有人能帮帮忙吗?
谢谢.
解决方法:
您可以在下面使用“技术”
首先运行查询#1.它生成您需要运行的查询(查询#2)以获得所需的结果.
请继续考虑Mosha的评论,然后再对数以千计的类别进行“疯狂”评论:o)
查询#1:
SELECT 'select UserID, ' +
GROUP_CONCAT_UNQUOTED(
'sum(if(category = "' + STRING(category) + '", 1, 0)) as ' + STRING(category)
)
+ ' from YourTable group by UserID'
FROM (
SELECT category
FROM YourTable
GROUP BY category
)
结果将如下所示 – 查询#2
SELECT
UserID,
SUM(IF(category = "A", 1, 0)) AS A,
SUM(IF(category = "B", 1, 0)) AS B,
SUM(IF(category = "C", 1, 0)) AS C
FROM
YourTable
GROUP BY
UserID
当然,对于三个类别 – 你可以手动完成它,但对于成千上万的人来说,definitelly会为你做一天!
查询#2的结果将如您所愿:
UserID A B C
1 1 1 0
2 0 0 1
3 1 1 1
标签:dummy-variable,sql,google-bigquery,mysql 来源: https://codeday.me/bug/20190918/1811323.html