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
在条件中。
我正在尝试根据另一列中出现的一个值来填写一列。
为了说明,这是 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
在条件中。