你有順序不對。該WHERE
條款進入前GROUP BY
:
select cu.CustomerID,cu.FirstName,cu.LastName, COUNT(si.InvoiceID)as inv
from Customer as cu
inner join SalesInvoice as si
on cu.CustomerID = si.CustomerID
where cu.FirstName = 'mark'
group by cu.CustomerID,cu.FirstName,cu.LastName
如果你想在GROUP BY
後進行過濾,則可以使用一個HAVING
條款:
select cu.CustomerID,cu.FirstName,cu.LastName, COUNT(si.InvoiceID)as inv
from Customer as cu
inner join SalesInvoice as si
on cu.CustomerID = si.CustomerID
group by cu.CustomerID,cu.FirstName,cu.LastName
having cu.FirstName = 'mark'
一個HAVING
條款通常用於聚合函數過濾,所以它是有意義的,這將適用於GROUP BY
要了解這裏的操作順序是article explaining the order。從文章中的SQL操作的順序是:
要開始了,我認爲這將是很好的查找表,其中SQL指令獲得,因爲這執行順序將改變我可以優化:
FROM clause
WHERE clause
GROUP BY clause
HAVING clause
SELECT clause
ORDER BY clause
使用此命令將應用過濾器之前的GROUP BY
的WHERE
。 WHERE
用於限制記錄的數量。
認爲它這樣,如果你是,那麼你將返回更多的記錄之後施加WHERE
那麼你將要在組。先應用它,減少記錄集然後應用分組。
羽絨選民!謹慎解釋爲什麼你投下了票? –
感謝所有的好答案。很難選擇其中之一。但是,我必須選擇一個。 –