数据库
首页 > 数据库> > mysql – 如何在Google BigQuery中为数千个类别创建虚拟变量列?

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