我是SQL新手,我想知道如果我在查询中同时使用WHERE和HAVING子句,HAVING子句中的条件顺序很重要。例如,对于以下查询(从书中取出),它们是否完全一样?我的理解是HAVING被应用于GROUP数据,这些数据已经被WHERE子句过滤,然后SUM()函数将只应用于那些过滤的数据。但是,在第二个查询中,事先未应用WHERE子句,并且在HAVING子句末尾应用条件InvoiceDate BETWEEN'2016-01-01'和'2016-01-31',因此SUM()将从所有数据计算,这与第一个查询不同。我理解对吗?在SQL中的having子句中,条件的顺序是否重要?
-- 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;