Как вы пишете скользящий "Case When" в PostgreSQL? - PullRequest
0 голосов
/ 21 января 2020

Допустим, у меня есть таблица с именем «средства», которая выглядит следующим образом:

year    mean
1990    1.5 
1991    1.0  
1992    1.3  
1993    1.0 

И у меня есть вторая таблица с именем «значения», которая выглядит следующим образом:

year tag value
1990 A   0.25
1991 B   1.10
1992 C   2.32
1993 A   0.70

Я хочу создать другой столбец, в котором, если значение для данного года больше, чем среднее значение для данного года, значение этого столбца должно быть «Больше». Если оно меньше среднего значения для данного года, оно должно быть «Меньше», а если оно равно среднему значению, оно должно быть «Равно».

По сути, я хочу создать серию операторов Case When, которые проиндексированы на год, указанный в таблице.

Как мне go сделать это?

1 Ответ

0 голосов
/ 21 января 2020

Это соединение с условной логикой c:

select 
    v.*,
    case 
        when v.value > m.mean then 'Greater'
        when v.value < m.mean then 'Less'
        else 'Equal'
    end comp
from vals v
inner join means m on m.year = v.year

Примечание: это называется регистр выражение , а не регистр оператор ( первое является условным выражением, а второе - структурой потока управления).

...