我是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;