Sql 将两个计数(*)结果相加
我有这两个查询,我想添加它们Sql 将两个计数(*)结果相加,sql,database,postgresql,select,count,Sql,Database,Postgresql,Select,Count,我有这两个查询,我想添加它们 SELECT count(*) FROM table2 GROUP BY table1_id SELECT count(*) FROM table3 GROUP BY table1_id 我试着做了一件类似于《圣经》中被接受的答案的事情。不同之处在于,我在两个查询中都有一个GROUPBY子句,我得到了以下错误 错误:用作表达式的子查询返回多行 **********错误********** 我遗漏了什么?以下是如何添加两个表的计数: WITH q1 AS (
SELECT count(*) FROM table2 GROUP BY table1_id
SELECT count(*) FROM table3 GROUP BY table1_id
我试着做了一件类似于《圣经》中被接受的答案的事情。不同之处在于,我在两个查询中都有一个GROUPBY子句,我得到了以下错误
错误:用作表达式的子查询返回多行
**********错误**********
我遗漏了什么?以下是如何添加两个表的计数:
WITH q1 AS (
SELECT count(DISTINCT table1_id) as count from table2
), q2 AS (
SELECT count(DISTINCT table1_id) as count from table3
)
SELECT (SUM(count + (SELECT count FROM q2)))
FROM q1
下面是如何添加两个表的计数:
WITH q1 AS (
SELECT count(DISTINCT table1_id) as count from table2
), q2 AS (
SELECT count(DISTINCT table1_id) as count from table3
)
SELECT (SUM(count + (SELECT count FROM q2)))
FROM q1
您可以根据
表1\u id
连接这两个查询:
SELECT a.table1_id, a.cnt + b.cnt
FROM (SELECT table1_id, COUNT(*) AS cnt
FROM table2
GROUP BY table1_id) a
JOIN (SELECT table1_id, COUNT(*) AS cnt
FROM table3
GROUP BY table1_id) b ON a.table1_id = b.table1_id
注:
此查询隐式假设两个表具有相同的
table1\u id
值。如果不是这样,您需要使用某种外部联接。您可以根据表1\u id将两个查询联接起来:
SELECT a.table1_id, a.cnt + b.cnt
FROM (SELECT table1_id, COUNT(*) AS cnt
FROM table2
GROUP BY table1_id) a
JOIN (SELECT table1_id, COUNT(*) AS cnt
FROM table3
GROUP BY table1_id) b ON a.table1_id = b.table1_id
注:
此查询隐式假设两个表具有相同的table1\u id
值。如果不是这种情况,则需要使用某种外部联接。在子查询中有groupby
,但不显示组。这似乎有点可疑
你需要把它们结合起来。第一个想法是完全外部连接
:
SELECT COALESCE(t2.table1_id, t3.table1_id) as table1_id,
t2.cnt, t3.cnt,
(COALESCE(t2.cnt, 0) + COALESCE(t3.cnt, 0) ) as t23_cnt
FROM (SELECT table1_id, count(*) as cnt FROM table2 GROUP BY table1_id
) t2 FULL OUTER JOIN
(SELECT table1_id, count(*) as cnt FROM table3 GROUP BY table1_id
) t3
ON t2.table1_id = t3.table1_id;
子查询中有分组依据
,但不显示分组。这似乎有点可疑
你需要把它们结合起来。第一个想法是完全外部连接
:
SELECT COALESCE(t2.table1_id, t3.table1_id) as table1_id,
t2.cnt, t3.cnt,
(COALESCE(t2.cnt, 0) + COALESCE(t3.cnt, 0) ) as t23_cnt
FROM (SELECT table1_id, count(*) as cnt FROM table2 GROUP BY table1_id
) t2 FULL OUTER JOIN
(SELECT table1_id, count(*) as cnt FROM table3 GROUP BY table1_id
) t3
ON t2.table1_id = t3.table1_id;
在这种情况下,样本数据和期望的结果将有助于传达您正试图做的事情。因此,有几个人在猜测您打算做什么,如果其中一个是正确的,那就太好了。。。但希望你能看到这其中缺乏清晰性,因此如果这些答案都不符合要求,那么我们需要的是:展示一个小的输入样本,同时展示给定的输入,期望的输出应该是什么。(这就是说,至于您缺少什么:当您在SELECT
子句中放置子查询时(根据您引用的另一个答案),它必须只返回一个结果,并且该结果将插入到外部查询的每一行中。当然,如果子查询是相关的,则每一行的结果可能不同,但它不可能是一个完整的结果设置从查询的一个实例返回。)在这种情况下,样本数据和期望的结果将有助于传达您想要做的事情。因此,有几个人在猜测您打算做什么,如果其中一个是正确的,那就太好了……但希望您看到缺乏清晰性,因此,如果这些答案都不符合要求,那么我们需要的是:显示一个小的输入样本,然后同时显示,给定输入,期望的输出应该是什么。(这就是说,至于您缺少什么:当您在SELECT
子句中放置子查询时(根据您引用的另一个答案),它必须只返回一个结果,并且该结果将插入到外部查询的每一行中。当然,如果子查询是相关的,则每一行的结果可能不同,但它不可能是一个完整的结果设置从查询的一个实例返回。)