替换在哪里

时间:2015-02-11 13:13:56

标签: sql sql-server

我有一个小组 - 有查询, 我可以在条件中添加额外的where条件而不是添加额外的where子句。结果是否相同?是否存在无法将所有where添加到having子句的情况。 我需要这个,因为我正在开发一个查询生成工具,这个特定的功能将为我节省一些关于UI和查询生成逻辑的工作。

例如

USE AdventureWorks ;
GO
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING SUM(LineTotal) > 100000.00 and  SalesOrderID>43875 and SalesOrderID <46066
ORDER BY SalesOrderID 

USE AdventureWorks ;
GO
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
where  SalesOrderID>43875 and SalesOrderID <46066
GROUP BY SalesOrderID
HAVING SUM(LineTotal) > 100000.00 
ORDER BY SalesOrderID 

2 个答案:

答案 0 :(得分:4)

如果引用的列在group by子句中,结果将是相同的。

但是,将它们放在where子句中是有利的,因为SQL Server可以在进行聚合之前消除行。这通常比之后删除它们更有效。 SQL Server可能有一个我不熟悉的优化。

如果having子句涉及不属于group by的列,则无法为{{1}}子句添加条件。

答案 1 :(得分:0)

WHERE用于在运行GROUP BY之前过滤/调整结果集。

HAVING用于在分组后过滤/调整结果集。

因此,在某些情况下,您可以获得相同的结果 - 两个运算符不同,并且不执行相同的操作,因此您应该使用适当的运算符来实现您的目标。