【发布时间】:2016-09-16 23:39:19
【问题描述】:
我是 SQL 新手,我想知道如果我在查询中同时使用 WHERE 和 HAVING 子句,HAVING 子句中的条件顺序是否重要。例如,对于以下查询(从书中取出),它们是否完全相同?我的理解是 HAVING 应用于已经被 WHERE 子句过滤的 GROUP 数据,然后 SUM() 函数将只应用于那些过滤后的数据。但是在第二个查询中,没有预先应用 WHERE 子句,并且在 HAVING 子句的末尾应用了条件 InvoiceDate BETWEEN '2016-01-01' AND '2016-01-31',因此 SUM() 将从所有数据计算,这与第一个查询不同。我理解的对吗?
-- First Query
SELECT
InvoiceDate,
COUNT(*) AS InvoiceQty,
SUM(InvoiceTotal) AS InvoiceSum
FROM
Invoices
WHERE
InvoiceDate BETWEEN '2016-01-01' AND '2016-01-31'
GROUP BY
InvoiceDate
HAVING
COUNT(*) > 1
AND SUM(InvoiceTotal) > 100
ORDER BY
InvoiceDate DESC;
-- Second Query
SELECT
InvoiceDate,
COUNT(*) AS InvoiceQty,
SUM(InvoiceTotal) AS InvoiceSum
FROM
Invoices
GROUP BY
InvoiceDate
HAVING
COUNT(*) > 1
AND SUM(InvoiceTotal) > 100
AND InvoiceDate BETWEEN '2016-01-01' AND '2016-01-31'
ORDER BY
InvoiceDate DESC;
【问题讨论】:
标签: sql sql-server