一个语句中的多个查询

Multiple queries in one statement

我需要在 PostgreSQL 中将以下两个查询合并到一个语句中。

select count(*) as REDEEMTOTALUSED 
from voucher 
where campaign_id='123' and redeemcount>0;

select count(*) as REDEEMTOTALUNUSED 
from voucher 
where campaign_id='123' and redeemcount=0;

结果应该如下。

兑换总用量 |兑换未使用的总量
1 | 9

这可能吗?

请尝试:

select 
    (select count(*) as REDEEMTOTALUSED 
     from voucher 
     where campaign_id='123' and redeemcount>0) AS REDEEMTOTALUSED ,
    (select count(*) as REDEEMTOTALUNUSED 
     from voucher 
     where campaign_id='123' and redeemcount=0) AS REDEEMTOTALUNUSED 

或其他方式:

    SELECT 
       SUM(CASE 
             WHEN redeemcount>0 THEN 1 
             ELSE 0 
           END) as REDEEMTOTALUSED ,
       SUM(CASE 
             WHEN redeemcount=0 THEN 1 
             ELSE 0
           END) as REDEEMTOTALUNUSED 
    from 
       voucher 
    WHERE
       campaign_id='123'

使用条件聚合:

select sum(case when redeemcount > 0 then 1 else 0 end) as REDEEMTOTALUSED,
       sum(case when redeemcount = 0 then 1 else 0 end) as REDEEMTOTALUNUSED
from voucher 
where campaign_id = '123';
SELECT count(redeemcount > 0 OR NULL) AS redeemtotalused
     , count(redeemcount = 0 OR NULL) AS redeemtotalunused
FROM   voucher
WHERE  campaign_id = '123'; -- or just 123 if campaign_id is a numeric type

适用技术概述:

旁白:在 Postgres (Overview) 中,不带引号的标识符被转换为 小写。您的语法约定对 Postgres 毫无帮助。

还有一个选项使用 CTE :

with cte as (
             select count(*) as REDEEMTOTALUSED 
             from voucher 
             where campaign_id='123' and redeemcount>0
),cte1 as   (
             select count(*) as REDEEMTOTALUNUSED 
             from voucher 
             where campaign_id='123' and redeemcount=0
)
select REDEEMTOTALUSED
      ,REDEEMTOTALUNUSED
from
cte1,cte2