我有一个小组 - 有查询, 我可以在条件中添加额外的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
答案 0 :(得分:4)
如果引用的列在group by
子句中,结果将是相同的。
但是,将它们放在where
子句中是有利的,因为SQL Server可以在进行聚合之前消除行。这通常比之后删除它们更有效。 SQL Server可能有一个我不熟悉的优化。
如果having
子句涉及不属于group by
的列,则无法为{{1}}子句添加条件。
答案 1 :(得分:0)
WHERE用于在运行GROUP BY之前过滤/调整结果集。
HAVING用于在分组后过滤/调整结果集。
因此,在某些情况下,您可以获得相同的结果 - 两个运算符不同,并且不执行相同的操作,因此您应该使用适当的运算符来实现您的目标。