#postgresql
Вопрос:
У меня есть таблица под названием Table1. Я пытаюсь получить среднее значение за неделю, но у меня есть только ежедневные данные. Моя таблица содержит следующие атрибуты: CaseID, дата, статус и некоторые другие (не относящиеся к делу) атрибуты. Со следующим запросом я составил следующую таблицу, которая близка к тому, что я хочу:
Тем не менее, я хотел бы добавить среднее число случаев в неделю. Я искал везде, но я не уверен, как это включить. У кого-нибудь есть какие-нибудь подсказки, как это добавить.
Спасибо.
Ответ №1:
Чтобы подробнее рассказать об ответе @luuk…
SELECT
date,
COUNT(id) as countcase,
EXTRACT(WEEK FROM date) AS weeknbr,
AVG(COUNT(id)) OVER (PARTITION BY EXTRACT(WEEK FROM date)) as weeklyavg
FROM table1
GROUP BY date, weeknbr
ORDER BY date, weeknbr
Это возможно, так как Агрегация / ГРУППИРОВКА ПО применяется перед функцией окна/аналитики.
Ответ №2:
select
date,
countcase,
extract(week from date) as weeknbr,
avg(countcase) over (partition by extract(week from date)) as weeklyavg
from table1;
Комментарии:
1. Единственная проблема заключается в том, что я создаю countcase в запросе (его нет в исходной таблице)… Как мне это обойти?
2. замените
countcase
наcount(id)
, чтобы соответствовать запросу, указанному в вашем вопросе.3. Я понимаю это, но как это работает для расчета среднего значения? Потому что это выдает ошибку, так как countcase нет в таблице.
4. Он не может выдать ошибку
countcase
, потому что вы заменилиcount(id)
ее на ?5. Извини, полностью моя вина… Вы совершенно правы! Я сейчас работаю!