Having和Where与Group By组合



当我使用GROUP BY而不是WHERE子句时,我已经学会了使用HAVING,并且从未遇到过任何问题。今天我在w3schools.com的SQL学习页面上看到了这一点:

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
WHERE LastName = 'Davolio' OR LastName = 'Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;
  1. 为什么要这样做
  2. 我什么时候该用这个

WHEREHAVING之间的差异对于何时应该使用其中一个与另一个,甚至两者结合使用至关重要。

HAVING使您能够根据聚合值对结果集进行文件管理。在您的示例中,您将查询返回的数据限制为聚合(COUNT(大于25的行。由于语法限制,无法在WHERE中定义此类谓词。

WHERE关键字用于为基于离散(非聚合(值的查询定义谓词。在您的示例中,WHERE基于LastName和FirstName值限制结果。

它们能够作为有效语法相互结合使用,因为它们执行不同的(尽管非常相似(操作,而其他操作无法单独完成。至于为什么要使用它,这只是一个需要基于聚合和离散条件来限制结果集的问题。

最新更新