Я пытаюсь объединить COUNT
, который содержит GROUP BY
с оператором AVG
. Я использую MSSql.SQL Show COUNT с AVG
Возможно ли иметь AVG
рядом с результатами COUNT
?
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
я получаю следующее сообщение об ошибке при попытке запустить этот последний запрос:
Column «MyTable .ActionID 'недопустим в списке выбора, потому что это нет содержащихся либо в агрегатной функции, либо в предложении GROUP BY.
Обратите внимание, что я должен сделать DATEDIFF
, чтобы получить из двух разных строк в одной таблице и столбце. Мой стол:
AIFMESSAGELOG
-------------
ACTIONID
REQUESTMESSAGEID
MESSAGEID
DIRECTION
CREATEDDATETIME
просто сделайте * AVG (b.FinalAvg) FinalAvg * – mxix
Спасибо @mxix, но я все равно получаю ту же ошибку. –
Добавить AVG во внешний FinalAvg. Каждый запрос, у которого есть группа, все поля должны либо быть в группе, либо быть агрегированы (SUM, MAX, AVG, ...). Ошибка, указывающая на то, что b.FinalAvg не ссылается в GROUP BY и не агрегируется. – mxix