SQL:从长格式转换为宽格式时选择最大值

SQL:从长格式转换为宽格式时选择最大值,sql,group-by,pivot,Sql,Group By,Pivot,我有一个如下表,我需要将其从这种长格式转换为宽格式,同时,我需要选择对应于最大分数的动作值: user_id time_id val0 val1 val2 action_value score 1 1 1 0 0 0 0.6 1 1 0 1 0 1 0.3 1 1 0 0 1 2 0.3 1 2

我有一个如下表,我需要将其从这种长格式转换为宽格式,同时,我需要选择对应于最大分数的动作值:

user_id time_id val0 val1 val2 action_value score
1       1       1    0     0   0            0.6
1       1       0    1     0   1            0.3
1       1       0    0     1   2            0.3
1       2       1    0     0   0            0.7
1       2       0    1     0   1            0.4
1       2       0    0     1   2            0.3
2       1       1    0     0   0            0.4
2       1       0    1     0   1            0.5
2       1       0    0     1   2            0.4
所需输出为:

 user_id time_id  score_0 score_1 score_2 action_value
 1       1           0.6.    0.3.   0.3   0
 1       2           0.7.    0.4    0.3.  0 
 2       1           0.4     0.5    0.4.  1

我使用的SQL没有PIVOT,因此无法使用PIVOT。我知道我可以使用条件聚合将数据从长格式转换为宽格式,但我不确定如何选择对应于最大分数的action\u value列。

您可以使用子查询,然后使用
grest()
(如果您的数据库支持):


第一行不是应该是
0.7
0.4
0.3
而不是
0.6
0.3
0.3
?如何计算
动作值
?示例中不清楚。添加您的数据库类型,并解释您的计算机action_value Val0、val1、val2是action_value的一个热编码版本。我也编辑了打字错误
select 
    t.*,
    case greatest(score0, score1, score2)
        when score0 then 0
        when score1 then 1
        when score2 then 2
    end action_value
from (
    select
        user_id,
        time_id,
        max(case when actual_value = 0 then score end) score0,
        max(case when actual_value = 1 then score end) score1,
        max(case when actual_value = 2 then score end) score2
    from mytable
    group by user_id, time_id
) t