相关问题: How to create dummy variable columns for thousands of categories in Google BigQuery
我有一个加权边列表,这是一个用户项评级列表,它看起来像这样:
| userId | itemId | rating
| 001 | 001 | 5.0
| 001 | 002 | 4.0
| 002 | 001 | 4.5
| 002 | 002 | 3.0
我想将此加权边列表转换为邻接矩阵:
| userId | item001 | item002
| 001 | 5.0 | 4.0
| 002 | 4.5 | 3.0
根据this post,我们可以分两步完成,第一步是提取矩阵条目的值以生成查询,第二步是运行从中生成的查询第一步。
但我的问题是如何提取评级值并使用IF()
声明中的评级值?我的直觉是在IF()
语句中放置一个嵌套查询,如:
IF(itemId = blah,
(select rating
from mytable
where
userId = blahblah
and itemId = blah),
0)
但是这个查询看起来太贵了,有人可以举个例子吗?
由于
答案 0 :(得分:2)
除非我遗漏了某些东西 - 它与您引用的帖子非常相似
第1步 - 生成查询
SELECT 'SELECT userID, ' +
GROUP_CONCAT_UNQUOTED(
'SUM(IF(itemId = "' + STRING(itemId) + '", rating, 0)) AS item' + STRING(itemId)
)
+ ' FROM YourTable GROUP BY userId'
FROM (
SELECT itemId
FROM YourTable
GROUP BY itemId
)
第2步 - 运行生成的查询
SELECT
userID,
SUM(IF(itemId = "001", rating, 0)) AS item001,
SUM(IF(itemId = "002", rating, 0)) AS item002
FROM YourTable
GROUP BY userId
按预期结果
userID item001 item002
001 5.0 4.0
002 4.5 3.0