wub*_*000 4 mysql sql google-bigquery dummy-variable
我有一个包含两列的简单表:UserID和Category,每个UserID可以重复几个类别,如下所示:
UserID Category
------ --------
1 A
1 B
2 C
3 A
3 C
3 B
Run Code Online (Sandbox Code Playgroud)
我想“虚拟化”该表:即创建一个输出表,该表的每个列都有由虚拟变量组成的唯一类别(0/1,取决于UserID是否属于该特定类别):
UserID A B C
------ -- -- --
1 1 1 0
2 0 0 1
3 1 1 1
Run Code Online (Sandbox Code Playgroud)
我的问题是我有数千个类别(在此示例中不只是3个类别),因此无法使用CASE WHEN语句有效地完成此操作。
所以我的问题是:
1)有没有一种方法可以在不使用数千个CASE WHEN语句的情况下“虚拟化” Google BigQuery中的Category列。
2)这是UDF功能正常工作的情况吗?看起来确实是这样,但是我对BigQuery中的UDF不够了解,无法解决此问题。有人可以帮忙吗?
谢谢。
您可以在“技术”下方使用
第一次运行查询1。它会生成您需要运行以获取所需结果的查询(查询2)。请,请先考虑Mosha的评论,然后再对成千上万的类别进行“疯狂”分析:
查询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
)
Run Code Online (Sandbox Code Playgroud)
结果将如下所示-查询#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
Run Code Online (Sandbox Code Playgroud)
当然可以分为三类-您可以手动完成,但成千上万种绝对可以为您赚钱!
查询2的结果将与您预期的一样:
UserID A B C
1 1 1 0
2 0 0 1
3 1 1 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8660 次 |
| 最近记录: |