Как использовать псевдоним моего вычисляемого параметра (в предложении SELECT) в предложении WHERE с PostgreSQL, чтобы предотвратить повторение? - PullRequest
0 голосов
/ 19 июня 2020

В запросе ниже параметр date_part('year', CURRENT_DATE) - f.birth_year повторяется три раза. Как заменить его псевдонимом age?

SELECT
    date_part('year', CURRENT_DATE) - f.birth_year AS age
FROM
    public.foo f
WHERE
    date_part('year', CURRENT_DATE) - f.birth_year >=20 AND
    date_part('year', CURRENT_DATE) - f.birth_year <=30

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Вы не можете повторно использовать псевдоним select в предложении where. Вам нужно повторить выражение или использовать подзапрос или cte.

Что бы это ни стоило, вы можете использовать between, чтобы выражение было только один раз вместо двух в предложении where:

SELECT date_part('year', CURRENT_DATE) - f.birth_year AS age
FROM public.foo f
WHERE date_part('year', CURRENT_DATE) - f.birth_year BETWEEN 20 AND 30

Что касается решения подзапроса, это будет:

SELECT *
FROM (
    SELECT date_part('year', CURRENT_DATE) - f.birth_year AS age
    FROM public.foo
) f
WHERE age BETWEEN 20 AND 30
0 голосов
/ 19 июня 2020

CTE позволяет вам давать названия выражениям, чтобы вы могли их избежать. Кстати, это неправильный расчет возраста:

with data as (
    SELECT date_part('year', CURRENT_DATE) - birth_year AS age
    FROM public.foo
)
select * from data
WHERE age >= 20 AND <= 30;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...