Получение среднего значения из подзапроса или другой совокупной функции в SQL Server
У меня есть оператор SQL (SQL Server)
SELECT
COUNT(ActionName) AS pageCount
FROM tbl_22_Benchmark
WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate)<7
GROUP BY
dateadd(dd,0, datediff(dd,0,CreationDate))
который производит выходные данные
<Б > PAGECOUNT
27
19
59
Теперь я хотел бы получить среднее значение всех этих чисел, используя SQL. Очевидно, что вложенные агрегированные функции, такие как
(AVG (COUNT (PageCount)))
не разрешены и с использованием подзапроса типа
SELECT AVG(pageCount) FROM
(
SELECT
COUNT(ActionName) AS pageCount
FROM tbl_22_Benchmark
WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate)<7
GROUP BY
dateadd(dd,0, datediff(dd,0,CreationDate))
)
возвращает мне сообщение об ошибке Неверный синтаксис рядом с ')'.
Как я могу получить среднее значение для строк pageCount?
Ответы
Ответ 1
Я не вижу весь ваш запрос, поскольку он, похоже, не размещен правильно.
Однако я считаю, что ваша проблема - это просто отсутствие имени для вашего производного таблицы/вложенного подзапроса.
Дайте ему псевдоним, например MyTable в этом примере
SELECT
AVG(pageCount)
FROM
(
SELECT
COUNT(ActionName) AS pageCount
FROM
tbl_22_Benchmark
) MyTable
Ответ 2
во второй попытке вам не хватает a) и псевдоним:
SELECT AVG(pageCount) as AvgPageCount FROM
(
SELECT
COUNT(ActionName) AS pageCount
FROM tbl_22_Benchmark
WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate)
) t
Ответ 3
Добавьте псевдоним подзапроса
SELECT AVG(pageCount)
FROM (SELECT COUNT(ActionName) AS pageCount
FROM tbl_22_Benchmark
WHERE DATEPART(dw,CreationDate)>1
AND DATEPART(dw,CreationDate) {Missing stuff here } ) AS Z
Ответ 4
В вашем подзапросе должен быть псевдоним, как в этом
SELECT AVG(pageCount) FROM
(
SELECT
COUNT(ActionName) AS pageCount
FROM tbl_22_Benchmark
WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate)<7
GROUP BY
dateadd(dd,0, datediff(dd,0,CreationDate))
) AS t
Ответ 5
Прежде всего, вы добавляете условие в конец запроса. Например:
WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate) < 10
2nd, вы не закрыли свою скобку в конце.
В-третьих, вы должны назвать свой внутренний запрос.
Это должно работать
SELECT AVG(pageCount) FROM
(
SELECT
COUNT(ActionName) AS pageCount
FROM tbl_22_Benchmark
WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate) < 10
) myInnerTable