groupBy пункт Postgres - PullRequest
       4

groupBy пункт Postgres

0 голосов
/ 25 марта 2019
select n.l_id, n.fromorto, DATE(dtime),avg(mean_speed) as ms_sat_t
from newdataa n
inner join majhwys as m
on n.l_id = m.link_id
where n.day_number=6 and n.fromorto='T'
group by n.fromorto,CAST(dtime as DATE),n.l_id
order by n.l_id


Здесь может быть четыре комбинации в предложении where, день номер 6/7 и fromorto - F / T.Я должен написать 4 отдельных запроса, есть ли способ, которым я могу написать один запрос с 4 столбцами (ms_sat_f, ms_sat_t, ms_sun_f, ms_sun_t).Я не совсем уверен в написании подзапросов.Любая помощь будет оценена.

1 Ответ

1 голос
/ 25 марта 2019

Вы можете использовать условное агрегирование с предложением filter:

select n.l_id, n.fromorto, DATE(dtime),
       avg(mean_speed) filter (where n.day_number = 6 and n.fromorto = 'T') as ms_sat_t,
       avg(mean_speed) filter (where n.day_number = 6 and n.fromorto = 'F') as ms_sat_f,
       avg(mean_speed) filter (where n.day_number = 7 and n.fromorto = 'T') as ms_sun_t,
       avg(mean_speed) filter (where n.day_number = 7 and n.fromorto = 'F') as ms_sun_f
from newdataa n inner join
     majhwys m
     on n.l_id = m.link_id
group by n.fromorto, CAST(dtime as DATE), n.l_id
order by n.l_id;

В старых версиях Postgres вы реализуете это с помощью условного агрегирования:

avg(case when n.day_number = 6 and n.fromorto = 'T' then mean_speed end) as ms_sat_t,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...