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