你的顺序错了。该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
after 然后你会返回更多的记录然后你会想要分组。首先应用它,减少记录集,然后应用分组。