Добавить средние значения в столбец для каждой группы в PostgreSQL - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть таблица, которая содержит список повторяющихся имен, значение оценки и тип оценки.Как можно сгруппировать по имени, получить среднее значение оценки для каждого имени для каждого типа оценки и добавить это среднее значение в созданный мной столбец с плавающей точкой с именем avg_score?Пример:

NAME        SCORE_TYPE       SCORE_VALUE     AVG_SCORE << Desired Output

bob         base_score       5               4
bob         base_score       4               4 
bob         base_score       3               4
bob         revised_score    1               3
bob         revised_score    5               3
bob         revised_score    3               3 
jack        base_score       5               5
jack        base_score       7               5 
jack        base_score       3               5
jack        revised_score    1               1
jack        revised_score    1               1
jack        revised_score    1               1 

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018
select
name
,score_type
,score_value
,avg(score_value) over(partition by name,score_type) as AVG_SCORE
from [table name]
0 голосов
/ 30 ноября 2018

Если вы хотите добавить это в таблицу, вам нужно update:

update t
    set AVG_SCORE = tt.avg_score
    from (select name, score_type, avg(score) as avg_score
          from t
          group by name, score_type
         ) tt
    where tt.name = t.name and tt.score_type = t.score_type;
0 голосов
/ 30 ноября 2018

использовать оконную функцию

select *, 
avg(SCORE_VALUE) over(partition by NAME,SCORE_TYPE) as AVG_SCORE from t
...