SQL - 如何将COUNT()与多个表一起使用

时间:2015-09-16 21:47:20

标签: mysql sql sql-server

我有一个包含COUNT()函数的表,该函数返回所有字段并计算出来。现在,我需要连接另一个表并返回匹配的行数和不匹配的行。我不确定如何使用GROUP BY和COUNT()函数并获得我需要的结果。

SELECT tb1.type, count(tb1.type) as total
FROM table1 tb1
GROUP BY tb1.type

这将为我返回总数:

TABLE1的结果:

Type total
Egg   200
Cream 133
Milk  12

太棒了。但是,现在我有另一个表...表2有一些匹配的记录,因此在该表上执行相同的查询将显示如下内容:

TABLE2的结果:

Type total
Egg   187
Cream 103
Milk  6

所以,我的结果需要看起来像这样:

TABLE1的结果:

Type total totalINTABLE2 totalNOTINTABLE2
Egg   200    187                13
Cream 133    103                30
Milk  12      6                 6

不确定此处加入是最佳,还是UNION或EXISTS。令我困惑的是小组。

2 个答案:

答案 0 :(得分:0)

嗯,你可以简单地init结果集,如

JOIN

答案 1 :(得分:0)

使用CTE计算每个表中的总数,然后将它们连接在一起:

;WITH
    cte1 as (
        SELECT tb1.type, count(tb1.type) as total
        FROM table1 tb1
        GROUP BY tb1.type
    ),
    cte2 as (
        SELECT tb2.type, count(tb2.type) as total
        FROM table2 tb2
        GROUP BY tb2.type
    )

SELECT    ISNULL(cte1.type, cte2.type) as type,
          cte1.total as TotalInTable1,
          cte2.total as TotalInTable2,
          ISNULL(cte1.total, 0) - ISNULL(cte2.total, 0) as TotalNotInTable2
FROM      cte1
FULL JOIN cte2 ON cte1.type = cte2.type