SQL:在Union All中的Union Vs Group BY中的Group BY

时间:2018-06-04 17:48:48

标签: sql sql-server sql-server-2016

在SQL中,我无法决定是使用Union还是Union All  在Union Union中使用Group By消除重复记录?或者建议使用Union with Group By

3 个答案:

答案 0 :(得分:0)

答案有点微妙。据我了解,UNION将删除您的第一个查询与之后运行的后续查询之间的重复项。但是,如果您的第一个数据集包含重复项,我相信这些数据集不会被删除。

当您尝试聚合某些数据时,会更多地使用分组依据。例如,使用Sum(),Min()Max(),这种类型的东西。如果您没有进行任何聚合,则不需要()组。如果您在联合中的一个或多个查询中进行聚合,则需要UNION和Group By。

最后,如果你想要消除所有重复项,并且你在第一个查询中没有任何聚合但是你看到重复,你也可以在第一个查询上抛出一个不同的,这将从你的初始数据集中消除它们同样。

答案 1 :(得分:0)

GROUP BY将消除每个子查询中的重复项,但UNION将消除子查询中的重复项。例如,这只会在ClientList1和ClientList2表中提供唯一的名称:

SELECT [Name] FROM ClientList1 GROUP BY [Name]
UNION
SELECT [Name] FROM ClientList2 GROUP BY [Name]

但这将包括BOTH表中存在的名称:

SELECT [Name] FROM ClientList1 GROUP BY [Name]
UNION ALL
SELECT [Name] FROM ClientList2 GROUP BY [Name]

答案 2 :(得分:0)

UNIONUNION ALL之间进行选择的基础是UNION需要更长时间,但可以删除一些重复内容。如果您希望不会有UNION将删除的重复项,或者可以在输出中包含这些重复项,请使用UNION ALL