SQL根据另一列中一个事件的值创建新列

问题描述 投票:0回答:1

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

为了说明,这是Google Analytics(分析)数据集的摘要:

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中执行此操作,而不必创建新的数据集->与原始数据集联接。

非常感谢!

sql google-bigquery google-analytics-firebase
1个回答
1
投票

您可以使用窗口功能:

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

© www.soinside.com 2019 - 2024. All rights reserved.