Подтвердить что ты не робот

Получение среднего значения из подзапроса или другой совокупной функции в 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?

4b9b3361

Ответ 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