PostgreSQL:使用别名列的情况

use*_*376 2 postgresql

我想做这样的事情:

select 
case when (select count(*) as score from users t1 )   >5   THEN score   else 0 end 
Run Code Online (Sandbox Code Playgroud)

当我尝试时,我收到错误:

column score doesn't exists. 
Run Code Online (Sandbox Code Playgroud)

我可以用其他方式做到这一点吗?我需要它来设置一个 LIMIT 值。我当然想这样做:

select 
case when (select count(*) as score from users t1 )   >5   THEN (select count(*) as score from users)    else 0 end 
Run Code Online (Sandbox Code Playgroud)

但比我需要执行两次相同的查询。有人有什么想法吗?

nta*_*lbs 7

您可以使用WITH条款:

with a as (select count(*) score from t)
select case when score > 5 then score else 0 end from a;
Run Code Online (Sandbox Code Playgroud)

或子查询(内联视图):

select case when score > 5 then score else 0 end 
from (select count(*) score from t) t;
Run Code Online (Sandbox Code Playgroud)