>我有一个如下所示的表格
base_data
session_id | event_type | player_guess | correct_answer |
---|---|---|---|
1 | 猜 | '蟒蛇' | 空 |
1 | guess'javascript'NULL | ||
1 | guess'scala'NULL | ||
1 | all_answered | NULL | ['python','javascript','hadoop'] |
2 | 猜 | '三角形' | 空 |
2 | 猜 | '平方' | 空 |
2 | all_answered | 空[ | '三角形', '正方形'] |
您可以使用窗口函数来获取每一行的正确答案。 然后,如何管理结果取决于列的类型。 如果是字符串,你可以只使用like
:
select t.*,
(case when event_type = 'all_answered' or
max(correct_answer) over (partition by session_id) like '%''' || player_guess || '''%'
then 1 else 0
end) as was_guess_correct
from t;
请注意,correct_answer
NULL
在"猜测"行中,因此max()
有效(假设每个会话有一个正确答案行)。