繁体   English   中英

使用count函数合并多个查询

[英]Union of multiple queries using the count function

我正在研究有关SQL Server中UNION函数如何工作的更多信息。

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

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 

我敢肯定有一个显而易见的原因为什么它不起作用,但是任何人都可以指出那是什么以及我如何完成我想做的事情吗?

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

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

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

SELECT * FROM (
    SELECT TABLE1.Category,
           COUNT(*) as Number
    FROM dbo.TABLE1
    GROUP BY TABLE1.Category
    UNION ALL
    SELECT TABLE2.Category,
           COUNT(*) as Number
    FROM dbo.TABLE2
    GROUP BY TABLE2.Category
) as a

与UNION相比,使用UNION ALL更好-UNION消除了结果集中的重复项,因为-可以说-您希望合并两个结果,因为使用UNION ALL更安全

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM