順序が間違っています。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
ここで操作の順序について学ぶために、順序を説明する記事があります。記事から、SQLでの操作の順序は次のとおりです。
まず、SQLディレクティブが実行される順序を調べるとよいと思いました。これにより、最適化の方法が変わるからです。
FROM clause
WHERE clause
GROUP BY clause
HAVING clause
SELECT clause
ORDER BY clause
この順序を使用して、のWHERE
前にフィルターを適用しますGROUP BY
。はWHERE
、レコード数を制限するために使用されます。
このように考えてください。WHERE
その後を適用する場合は、グループ化するよりも多くのレコードを返すことになります。最初に適用し、レコードセットを減らしてから、グループ化を適用します。