SQL - HAVING 子句中的聚合
TSQL - Aggregates in HAVING Clause
我知道这个问题已经被问了很多,但是当我解决错误消息并使用 HAVING 子句时,我仍然收到可怕的消息:
An aggregate may not appear in the WHERE clause unless it is in a
subquery contained in a HAVING clause or a select list,
and the column being aggregated is an outer reference.
我这里哪里做错了?
SELECT
mr.ClubKeyNumber,
COUNT(mr.MonthlyReportID),
SUM(CONVERT(int,mr.Submitted))
FROM MonthlyReport mr
WHERE mr.ReportYear = 2014
AND COUNT(mr.MonthlyReportID) = 12
GROUP BY mr.ClubKeyNumber
HAVING (SUM(CONVERT(int,mr.Submitted))) > 11
问题不在于您的 HAVING
子句,而在于您的 WHERE
子句。
您的 where
子句中有一个聚合 count
,试试这个:
SELECT
mr.ClubKeyNumber,
COUNT(mr.MonthlyReportID),
SUM(CONVERT(int,mr.Submitted))
FROM MonthlyReport mr
WHERE mr.ReportYear = 2014
GROUP BY mr.ClubKeyNumber
HAVING (SUM(CONVERT(int,mr.Submitted))) > 11 and COUNT(mr.MonthlyReportID) = 12
where
子句检查在 group by
子句之前聚合的每一行。它不能 count
你的 MonthlyReportID
直到 在 之后 group by
所以把它移到 having clause
.
Here is a simple example你可以一起玩来演示where vs have.
我知道这个问题已经被问了很多,但是当我解决错误消息并使用 HAVING 子句时,我仍然收到可怕的消息:
An aggregate may not appear in the WHERE clause unless it is in a
subquery contained in a HAVING clause or a select list,
and the column being aggregated is an outer reference.
我这里哪里做错了?
SELECT
mr.ClubKeyNumber,
COUNT(mr.MonthlyReportID),
SUM(CONVERT(int,mr.Submitted))
FROM MonthlyReport mr
WHERE mr.ReportYear = 2014
AND COUNT(mr.MonthlyReportID) = 12
GROUP BY mr.ClubKeyNumber
HAVING (SUM(CONVERT(int,mr.Submitted))) > 11
问题不在于您的 HAVING
子句,而在于您的 WHERE
子句。
您的 where
子句中有一个聚合 count
,试试这个:
SELECT
mr.ClubKeyNumber,
COUNT(mr.MonthlyReportID),
SUM(CONVERT(int,mr.Submitted))
FROM MonthlyReport mr
WHERE mr.ReportYear = 2014
GROUP BY mr.ClubKeyNumber
HAVING (SUM(CONVERT(int,mr.Submitted))) > 11 and COUNT(mr.MonthlyReportID) = 12
where
子句检查在 group by
子句之前聚合的每一行。它不能 count
你的 MonthlyReportID
直到 在 之后 group by
所以把它移到 having clause
.
Here is a simple example你可以一起玩来演示where vs have.