Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 server 冗余聚合与冗余分组?_Sql Server_Group By_Aggregate Functions - Fatal编程技术网

Sql server 冗余聚合与冗余分组?

Sql server 冗余聚合与冗余分组?,sql-server,group-by,aggregate-functions,Sql Server,Group By,Aggregate Functions,我有一个查询,它通过一个列连接两个表,该列恰好是其中一个表的主键。我还对同一列进行分组。现在我需要使用主键从表中返回一些列。在MySQL中,我可以将它们添加到select语句中,而不必担心任何事情,但在SQL Server中,我必须将它们添加到GROUP BY,或者将它们包含在聚合函数中(如MAX)。从逻辑上讲,这两个列都是冗余的,因为主键确保我要获取的列在整个组中具有相同的值。问题是哪种解决方案更好(使用聚合函数或将它们按分组) 我测试了这两种变体,它们似乎具有相同的查询成本。执行计划几乎相同

我有一个查询,它通过一个列连接两个表,该列恰好是其中一个表的主键。我还对同一列进行分组。现在我需要使用主键从表中返回一些列。在MySQL中,我可以将它们添加到select语句中,而不必担心任何事情,但在SQL Server中,我必须将它们添加到
GROUP BY
,或者将它们包含在聚合函数中(如
MAX
)。从逻辑上讲,这两个列都是冗余的,因为主键确保我要获取的列在整个组中具有相同的值。问题是哪种解决方案更好(使用聚合函数或将它们按分组)

我测试了这两种变体,它们似乎具有相同的查询成本。执行计划几乎相同,但带有聚合函数(
MAX
)的变体似乎稍快一些。但是,使用聚合函数会对所使用的类型施加一些限制,并迫使我不必要地转换某些列的类型(我正在查看您的
bit
column)。注意,我确实需要结果来匹配某些类型

另外,我还可以将实际需要分组的列移动到子查询中,并将其放入
FROM
部分,以避免在不需要它的列上使用聚合函数或
groupby
。然而,我的直觉告诉我,它不会使它更快(必须测试它)


然而,我再一次证明,当涉及到SQL时,没有总是正确的答案。就我而言,答案是不使用这两种解决方案中的任何一种。我的直觉是错误的,将确实需要分组的表\列放在子查询中,而不是将它们与其余的表\列连接在一起,这是一种方法(执行时间甚至更短)。然而,在另一个查询中,这个解决方案可能会让事情变得更糟


因此,我没有找到冗余的
groupby
vs冗余聚合的答案,而是发现它实际上是一个冗余的
groupby
vs冗余聚合vs一个具有非冗余
groupby

的子查询,我自己解决了我的特定问题,但是我需要在问题中添加一些示例代码,以使其对其他人更有用(或者将其作为答案编写)。是的,如果您有答案,您应该将其作为答案发布。问题应包含问题,答案应包含解决方案,对您有效的答案应标记为已接受(以便我们知道您不再寻找答案)。StackOverflow帮助中明确指出,您可以为自己的问题写一个答案并接受它(尽管我认为在发布和接受之间存在一些强制的时间延迟)。