如何使用postgresql的where子句中我的计算参数(在select子句中)的别名来防止重复?

sdnqo3pr  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(577)

在下面的查询中,参数 date_part('year', CURRENT_DATE) - f.birth_year 重复三次。如何用它的别名替换它 age ?

  1. SELECT
  2. date_part('year', CURRENT_DATE) - f.birth_year AS age
  3. FROM
  4. public.foo f
  5. WHERE
  6. date_part('year', CURRENT_DATE) - f.birth_year >=20 AND
  7. date_part('year', CURRENT_DATE) - f.birth_year <=30
6qqygrtg

6qqygrtg1#

你不能重复使用 select 中的别名 where 条款。您需要重复表达式,或者使用子查询或cte。
不管它值多少钱,你都可以用 between 只表达一次而不是两次 where 条款:

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

至于子查询解决方案,应该是:

  1. SELECT *
  2. FROM (
  3. SELECT date_part('year', CURRENT_DATE) - f.birth_year AS age
  4. FROM public.foo
  5. ) f
  6. WHERE age BETWEEN 20 AND 30
ruyhziif

ruyhziif2#

cte允许您命名表达式,以避免重复它们。顺便说一下,这不是年龄的正确计算方法:

  1. with data as (
  2. SELECT date_part('year', CURRENT_DATE) - birth_year AS age
  3. FROM public.foo
  4. )
  5. select * from data
  6. WHERE age >= 20 AND <= 30;

相关问题