我试图将包含GROUP BY
的COUNT
与AVG
语句组合在一起。我正在使用MSSql。SQL显示计数与AVG
是否有可能在COUNT
结果旁边有AVG
?
COUNT SQL:
SELECT ActionId, COUNT(ActionId) as ActionCount
FROM AIFMESSAGELOG
WHERE DIRECTION = 1 AND CREATEDDATETIME >= '2016-08-15 23:59:59.000' AND CREATEDDATETIME <= '2016-08-16 23:59:59.000'
Group By ActionId
Order By ActionCount DESC
这将返回:
ActionId ActionCount
Insert Action 672
Update Action 184
AVG SQL:
SELECT DATEDIFF(millisecond, b.CREATEDDATETIME, a.CREATEDDATETIME)*1.0 AS AvgTime
FROM AIFMESSAGELOG a
INNER JOIN AIFMESSAGELOG b
ON a.REQUESTMESSAGEID = b.MESSAGEID
WHERE b.CREATEDDATETIME >= '2016-08-15 23:59:59.000' AND b.CREATEDDATETIME <= '2016-08-16 23:59:59.000' AND a.ACTIONID = 'Insert Action'
ORDER BY A.CREATEDDATETIME DESC
这将返回:
AvgTime
50
结果所需要的:
ActionId ActionCount AvgTime
Insert Action 672 50
Update Action 184 25
我的代码:
SELECT a.ActionId, COUNT(a.ActionId) as ActionCount, b.FinalAvg
FROM AIFMESSAGELOG a
INNER JOIN
(
SELECT AVG(AvgTime) AS FinalAvg, ACTIONID
FROM
(
SELECT c.ActionID, DATEDIFF(millisecond, d.CREATEDDATETIME, c.CREATEDDATETIME)*1.0 AS AvgTime
FROM AIFMESSAGELOG c
INNER JOIN AIFMESSAGELOG d
ON c.REQUESTMESSAGEID = d.MESSAGEID
)MyTable
) b
ON a.ACTIONID = b.ACTIONID
WHERE a.DIRECTION = 1 AND a.CREATEDDATETIME >= '2016-08-15 23:59:59.000' AND a.CREATEDDATETIME <= '2016-08-16 23:59:59.000'
Group By a.ActionId
Order By ActionCount DESC
我收到以下错误,当我尝试运行这最后询问:
列“MyTable的.ActionID'在选择列表中无效,因为它不是 包含在聚合函数或GROUP BY子句中。
请注意,我必须做一个DATEDIFF
来从同一个表和列中的2个不同的行。 我的表:
AIFMESSAGELOG
-------------
ACTIONID
REQUESTMESSAGEID
MESSAGEID
DIRECTION
CREATEDDATETIME
只是做* AVG(b.FinalAvg)FinalAvg * – mxix
谢谢@mxix但我仍然得到同样的错误。 –
将AVG添加到外部FinalAvg。每个含有group by的查询,所有字段都必须通过OR被聚合(SUM,MAX,AVG,...)。指向b.FinalAvg未在GROUP BY中引用且未被汇总的错误。 – mxix