SQL 根据另一列中出现的值创建新列

SQL create new column based on value of one occurrence in another column

我正在尝试根据另一列中出现的一个值来填写一列。

为了说明,这是 Google 分析数据集的片段:

UID         event_name       params.key             params.value.string_value  
------------------------------------------------------------------------------
abc         first_open       firebase_event_origin  auto  
abc         user_engagement  firebase_screen        Login Screen  
abc         view_item        item_id                Grade 2
xyz         user_engagement  firebase_screen        Profile Screen    
xyz         view_item        item_id                Grade 11  

我想添加如下所示的成绩列:

UID         event_name       params.key             params.value.string_value    Grade
------------------------------------------------------------------------------------------
abc         first_open       firebase_event_origin  auto                         Grade 2  
abc         user_engagement  firebase_screen        Login Screen                 Grade 2  
abc         view_item        item_id                Grade 2                      Grade 2  
xyz         user_engagement  firebase_screen        Profile Screen               Grade 11  
xyz         view_item        item_id                Grade 11                     Grade 11                

我试过了

SELECT UID, params.value.string_value AS Grade 
FROM `Google_Analytics` 
WHERE params.key="item_id"

然后将生成的数据集与 Google_Analytics 数据集连接起来。但我想知道是否有一种方法可以在原始数据集 Google_Analytics 中执行此操作而无需创建新数据集 --> 加入原始数据集。

非常感谢您!

您可以使用 window 函数:

select ga.*,
       max(case when params.key = 'item_id' then params.value.string_value end) over (partition by uid) as grade
from `Google_Analytics` ga;

我不确定你是否也想要 view_item 在条件中。