Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将两个计数(*)结果相加_Sql_Database_Postgresql_Select_Count - Fatal编程技术网

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
子句中放置子查询时(根据您引用的另一个答案),它必须只返回一个结果,并且该结果将插入到外部查询的每一行中。当然,如果子查询是相关的,则每一行的结果可能不同,但它不可能是一个完整的结果设置从查询的一个实例返回。)