使用count函数的多个查询的联合

时间:2017-01-26 15:03:55

标签: sql sql-server count union

我正在努力学习更多关于UNION函数在SQL Server中的工作原理。

我有一个针对单个表的查询:

SELECT Category, COUNT(*) AS Number
FROM Table1
GROUP BY Category;

这将返回Category列中每个不同行的条目数。

我有多个由Category列组织的表,我希望能够获得一个查询返回的每个表的结果。

似乎UNION将完成我想要的操作,但我尝试实施查询的方式不适用于COUNT(*)

SELECT *
FROM   (SELECT Table1.Category
               Table1.COUNT(*) AS Number
        FROM   dbo.Table1
        UNION
        SELECT Table2.Category
               Table2.COUNT(*) AS Number
        FROM   dbo.Table2) AS a
GROUP  BY a.Category 

我确信有一个明显的原因,为什么这不起作用,但任何人都可以指出这是什么以及我如何能够完成我想要做的事情?

2 个答案:

答案 0 :(得分:2)

您无法为两个不同的Group by编写通用select's子句。您需要为每个Group by

使用select子句
SELECT TABLE1.Category, --missing comma here
       COUNT(*) as Number -- Remove TABLE1. alias name
FROM dbo.TABLE1
GROUP BY Category
UNION ALL --UNION
SELECT TABLE2.Category, --missing comma here
       COUNT(*) as Number -- Remove TABLE1. alias name
FROM dbo.TABLE2
GROUP BY Category

如果您确实要删除结果中的重复项,请将UNION ALL更改为UNION

答案 1 :(得分:1)

COUNT,因为任何关联的聚合函数都必须指定GROUP BY。您必须分别对每个子查询使用group by:

ionic start sample --v2
cd sample
ionic lab
ionic upload

最好使用UNION ALL vs UNION - UNION消除结果集中的重复项,因为 - 假设 - 你想要合并两个结果,因为它们使用UNION ALL更安全