postgres: выберите выражение, используемое в группе по - PullRequest
0 голосов
/ 27 марта 2019

Я хочу сгруппировать по сложному выражению, и я хочу иметь возможность выбрать это выражение

select
  (date_part('minute',(period_start - :start)) / 6), -- problematic row
  max(high) as high
from x where ...
group by
  (date_part('minute',(period_start - :start)) / 6)

все работает без "проблемного ряда". после добавления этой строки, хотя она совпадает с группировкой по выражению, я получаю ошибку:

ОШИБКА: столбец "x.period_start" должен появляться в предложении GROUP BY или использоваться в статистической функции

1 Ответ

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

Я обычно избавляюсь от проблем, подобных той, которую вы упоминаете при использовании CTE (Common Table Expressions).Я бы вычислял выражение только один раз в cte, а затем использовал бы его столько раз, сколько мне нужно.

Например, я бы перефразировал ваш запрос как:

with
cte1 as (
  select
    (date_part('minute',(period_start - :start)) / 6) as mins,
    high
  from x where ...
)
select mins, max(high) as high
from cte1
group by mins
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...