Matrix 从BigQuery中的加权边列表构建邻接矩阵
相关问题: 我有一个加权边列表,它是一个用户项目评级列表,如下所示:Matrix 从BigQuery中的加权边列表构建邻接矩阵,matrix,google-bigquery,transpose,Matrix,Google Bigquery,Transpose,相关问题: 我有一个加权边列表,它是一个用户项目评级列表,如下所示: | 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
| 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
根据,我们可以分为两步,第一步是提取矩阵项的值以生成查询,第二步是运行从第一步生成的查询
但我的问题是如何提取评级值并在IF()
语句中使用评级值?我的直觉是将嵌套查询放入IF()
语句中,如:
IF(itemId = blah,
(select rating
from mytable
where
userId = blahblah
and itemId = blah),
0)
但是这个查询看起来太贵了,有人能给我举个例子吗
谢谢除非我遗漏了什么-它与您引用的帖子非常相似 步骤1-生成查询 步骤2-运行生成的查询 如期而至
除非我遗漏了什么——它与你引用的帖子非常相似 步骤1-生成查询 步骤2-运行生成的查询 如期而至
啊,是的,你是对的,这很相似,我认为评级应该从子查询中提取。啊,是的,你是对的,这很相似,我认为评级应该从子查询中提取。。
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
)
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