【发布时间】:2021-08-10 19:48:50
【问题描述】:
我有一个聚合三个结果列的查询:
pending_with_documentspending_without_documentsinprocessing
SELECT COUNT(DISTINCT (CASE
WHEN status_code IN ('ACK', 'INT') THEN
CASE
WHEN ack_no IN
(SELECT ack_no FROM bescom_appl_upload_doc) THEN ack_no END
END)) AS pending_with_documents,
COUNT(DISTINCT (CASE
WHEN status_code IN ('ACK', 'INT') THEN
CASE
WHEN ack_no NOT IN
(SELECT ack_no FROM bescom_appl_upload_doc) THEN ack_no END
END)) AS pending_without_documents,
COUNT(CASE
WHEN status_code NOT IN ('ACK', 'INT', 'APR', 'REJ', 'SBK', 'OBJ') THEN
ack_no
END) AS Inprocessing
FROM application_ht_install
WHERE service_code IN (36);
现在我需要一个第四列total来总结这三个。所以我尝试了:
SELECT COUNT(DISTINCT (CASE
WHEN status_code IN ('ACK', 'INT') THEN
CASE
WHEN ack_no IN
(SELECT ack_no FROM bescom_appl_upload_doc) THEN ack_no END
END)) AS pending_with_documents,
COUNT(DISTINCT (CASE
WHEN status_code IN ('ACK', 'INT') THEN
CASE
WHEN ack_no NOT IN
(SELECT ack_no FROM bescom_appl_upload_doc) THEN ack_no END
END)) AS pending_without_documents,
COUNT(CASE
WHEN status_code NOT IN ('ACK', 'INT', 'APR', 'REJ', 'SBK', 'OBJ')
THEN ack_no END) AS Inprocessing
SUM((COUNT(DISTINCT(CASE WHEN status_code IN ('ACK','INT') THEN
CASE WHEN ack_no IN
(SELECT ack_no FROM bescom_appl_upload_doc) THEN ack_no END
END)) AS pending_with_documents )+ ( COUNT(DISTINCT(CASE WHEN status_code IN ('ACK','INT') THEN
CASE WHEN ack_no NOT IN
(SELECT ack_no FROM bescom_appl_upload_doc) THEN ack_no END
END)) AS pending_without_documents)+ ( COUNT(CASE WHEN status_code NOT IN('ACK','INT','APR','REJ','SBK','OBJ') THEN
ack_no
END) AS Inprocessing))
FROM application_ht_install
WHERE service_code IN (36);
但我收到一个错误:
ERROR: syntax error at or near "sum" LINE 13: sum((count(distinct(case when status_code in ('ACK','INT') t... ^ SQL state: 42601 Character: 473
这三个派生列如何相加?
【问题讨论】:
-
编写一个外部查询,其中您的查询是
FROM列表中的子查询,并在thatbouter 查询中添加列? -
从实际的、精确的表定义开始(
CREATE TABLE语句)——这很重要! (如果涉及任何 NULL 值,NOT IN可能不会做你认为它正在做的事情......)而且总是你的 Postgres 版本。
标签: sql postgresql aggregate aggregate-filter