一个语句中的多个查询
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
我需要在 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