sql根据另一列中某个引用的值创建新列

wtzytmuj  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(332)

我正在尝试根据另一列中某个引用的值填充一列。
举例来说,这是谷歌分析数据集的一个片段:

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 无需创建新的数据集-->与原始数据集联接。
事先非常感谢!

mbzjlibv

mbzjlibv1#

可以使用窗口函数:

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 同样的情况。

相关问题