Select 在 Postgres 中有大小写
Select in Postgres with case
我正在尝试进行以下咨询:
Managers | Clerks | Presidents | Analysts | Salesmans
-------------+---------+--------------+ -----------+-------------
3 4 1 2 4
到目前为止我设法做到了:
select CASE WHEN lower(job)='salesman' THEN count(job) as "SALESMAN"
WHEN lower(job)='clerk' THEN count(job) as "CLERK"
WHEN lower(job)='manager' THEN count(job) as "MANAGER"
WHEN lower(job)='analyst' THEN count(job) as "ANALYST"
WHEN lower(job)='president' THEN count(job) as "PRESIDENT"
from emp
group by job;
但我似乎无法运行它,它会出错:
ERROR: syntax error at or near "as"
LINE 1: ... CASE WHEN lower(job)='salesman' THEN count(job) as "SALESM...
如何在 select 中使用 case 来创建单独的列?
您需要将计数 放在 周围 case
:
select count(CASE WHEN lower(job)='salesman' THEN 1 END) as "SALESMAN"
count(CASE WHEN lower(job)='clerk' THEN 1 END) as "CLERK"
count(case WHEN lower(job)='manager' THEN 1 END) as "MANAGER"
count(case WHEN lower(job)='analyst' THEN 1 END) as "ANALYST"
count(case WHEN lower(job)='president' THEN 1 END) as "PRESIDENT"
from emp;
count()
等聚合函数会忽略空值。 CASE
表达式 returns a NULL
表示不符合条件的值,因此不计算在内。
或者使用 filter
子句更简单:
select count(*) filter (where lower(job)='salesman') as "SALESMAN"
count(*) filter (where lower(job)='clerk') as "CLERK"
count(*) filter (where lower(job)='manager') as "MANAGER"
count(*) filter (where lower(job)='analyst') as "ANALYST"
count(*) filter (where lower(job)='president') as "PRESIDENT"
from emp;
我正在尝试进行以下咨询:
Managers | Clerks | Presidents | Analysts | Salesmans
-------------+---------+--------------+ -----------+-------------
3 4 1 2 4
到目前为止我设法做到了:
select CASE WHEN lower(job)='salesman' THEN count(job) as "SALESMAN"
WHEN lower(job)='clerk' THEN count(job) as "CLERK"
WHEN lower(job)='manager' THEN count(job) as "MANAGER"
WHEN lower(job)='analyst' THEN count(job) as "ANALYST"
WHEN lower(job)='president' THEN count(job) as "PRESIDENT"
from emp
group by job;
但我似乎无法运行它,它会出错:
ERROR: syntax error at or near "as"
LINE 1: ... CASE WHEN lower(job)='salesman' THEN count(job) as "SALESM...
如何在 select 中使用 case 来创建单独的列?
您需要将计数 放在 周围 case
:
select count(CASE WHEN lower(job)='salesman' THEN 1 END) as "SALESMAN"
count(CASE WHEN lower(job)='clerk' THEN 1 END) as "CLERK"
count(case WHEN lower(job)='manager' THEN 1 END) as "MANAGER"
count(case WHEN lower(job)='analyst' THEN 1 END) as "ANALYST"
count(case WHEN lower(job)='president' THEN 1 END) as "PRESIDENT"
from emp;
count()
等聚合函数会忽略空值。 CASE
表达式 returns a NULL
表示不符合条件的值,因此不计算在内。
或者使用 filter
子句更简单:
select count(*) filter (where lower(job)='salesman') as "SALESMAN"
count(*) filter (where lower(job)='clerk') as "CLERK"
count(*) filter (where lower(job)='manager') as "MANAGER"
count(*) filter (where lower(job)='analyst') as "ANALYST"
count(*) filter (where lower(job)='president') as "PRESIDENT"
from emp;