Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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:Group BY in Union Vs Group BY in Union All_Sql_Sql Server_Sql Server 2016 - Fatal编程技术网

SQL:Group BY in Union Vs Group BY in Union All

SQL:Group BY in Union Vs Group BY in Union All,sql,sql-server,sql-server-2016,Sql,Sql Server,Sql Server 2016,在SQL中,我无法决定是使用Union还是UNIONALL 联合使用Group By可消除重复记录?还是建议使用Union和Group By组合?答案有点微妙。据我所知,UNION将删除第一个查询与UNION之后运行的后续查询之间的重复项。但是,如果您的第一个数据集包含重复的数据集,我相信这些数据集不会被删除 当您试图聚合某些数据时,更常用Group By。例如,对于Sum(),Min()Max(),这种类型的东西。如果不进行任何聚合,则不需要group by()。如果要在联合中的一个或多个查询

在SQL中,我无法决定是使用Union还是UNIONALL
联合使用Group By可消除重复记录?还是建议使用Union和Group By组合?答案有点微妙。据我所知,UNION将删除第一个查询与UNION之后运行的后续查询之间的重复项。但是,如果您的第一个数据集包含重复的数据集,我相信这些数据集不会被删除

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


最后,如果要消除所有重复项,并且在第一个查询中没有任何聚合,但看到了重复项,那么还可以在第一个查询中抛出一个distinct,这也将从初始数据集中消除它们

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

SELECT [Name] FROM ClientList1 GROUP BY [Name]
UNION
SELECT [Name] FROM ClientList2 GROUP BY [Name]
但这将包括两个表中存在的名称:

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

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

您使用的是什么数据库(例如MySQL、SQL Server等)?在每种情况下,正确的做法将取决于这一点。在任何情况下,你都可以尝试两种方法,看看解释计划。这一切都取决于你想做什么。向我们显示数据库模式、示例数据、当前和预期输出。请阅读,这里是一个学习如何提高问题质量和获得更好答案的好地方。你使用你需要/想要的。如果可能(即两者返回相同的结果)
union-all
应该使用,因为它不是不同的。
union
消除重复
union-all
保留重复SQL Server 2016,我想要不同的结果。作为工会,所有人的表现都比工会好。我可以使用Group BY和UNION ALL来获得不同的结果吗?
UNION
删除所有重复项,无论它们来自何处。他的问题只是在进行联合时消除重复项。有时,人们会按所有列分组,而不使用聚合函数来删除重复项。根据数据库和列统计信息,这可能会更有效。@错误\u 2646:但UNION不删除其中一个查询中出现的重复项的说法仍然是错误的。对于现代的数据库管理系统来说,所有列上的
GROUP BY
DISTINCT
(或union)@a_horse_和_no_name的效率更高。我想我没有这样说。此外,我对Teradata的研究还不够深入,无法与之对话,但绝对有一些情况下,所有列上的group by都比distinct快,即当大多数记录都是重复的。@Error_2646:关于Teradata,无论您是编写distinct还是group by,这个选择通常都是由优化器完成的。