Использование псевдонима в предложении HAVING
вызывает проблему.Вы можете использовать выражение to_char
в выражении HAVING
(или WHERE
).Но чтобы избежать репликации кода, вы должны выполнить подзапрос или CTE:
SELECT
mon,
year,
...
FROM (
SELECT
to_char(p.log_date, 'Mon') as mon,
extract(year from p.log_date) as year,
...
FROM ...
)s
group by
mon
having
mon = 'september'
and
year = '2018';
CTE:
WITH my_sub_query AS (
SELECT
to_char(p.log_date, 'Mon') as mon,
extract(year from p.log_date) as year,
...
FROM ...
)
SELECT
mon,
year,
...
FROM my_sub_query
group by
mon
having
mon = 'september'
and
year = '2018';
Более того:
- Попробуйтеиспользуйте
WHERE
вместо HAVING
- Для группировки по месяцу и году вы можете сделать
date_trunc('month', p.log_date)
вместо to_char
и extract