Суммарная или статистическая функция sql в готовом столбце со сложным запросом - PullRequest
0 голосов
/ 02 декабря 2009

У меня есть запрос, который принимает средние данные (цены) за 7 дней недели в течение длительного интервала. IE средние цены за понедельник, вторник и т. Д. Он работает нормально, но я не уверен, как я могу в том же запросе суммировать средние значения, которые этот запрос находит? Суммирование Day1..Day5

В данном виде этот запрос суммирует все от всех цен ... IE огромное количество .. не от среднего.

Есть идеи? Кстати, это от Postgres ... Спасибо

SELECT rooms.name, rooms.id,
MAX(CASE WHEN (EXTRACT(DOW FROM availables.bookdate) - EXTRACT(DOW FROM DATE '2009-12-13')) = 0 THEN (availables.price) ELSE 0 END) AS day1,
MAX(CASE WHEN (EXTRACT(DOW FROM availables.bookdate) - EXTRACT(DOW FROM DATE '2009-12-13')) = 1 THEN (availables.price) ELSE 0 END) AS day2,
MAX(CASE WHEN (EXTRACT(DOW FROM availables.bookdate) - EXTRACT(DOW FROM DATE '2009-12-13')) = 2 THEN (availables.price) ELSE 0 END) AS day3,
MAX(CASE WHEN (EXTRACT(DOW FROM availables.bookdate) - EXTRACT(DOW FROM DATE '2009-12-13')) = 3 THEN (availables.price) ELSE 0 END) AS day4,
MAX(CASE WHEN (EXTRACT(DOW FROM availables.bookdate) - EXTRACT(DOW FROM DATE '2009-12-13')) = 4 THEN (availables.price) ELSE 0 END) AS day5,
(AVG(availables.price)) AS avg,
(SUM(availables.price)) AS sum, MAX((SIGN(spots)-1) + 1) AS beds
 FROM availables
 INNER JOIN rooms
 ON availables.room_id=rooms.id
 WHERE availables.room_id = '1780' AND availables.price > 0
 GROUP BY rooms.id, rooms.name

1 Ответ

1 голос
/ 02 декабря 2009

Вот то, что должно работать ....

select avg(mon+tues+weds+thur+fri) as averageall,
       sum(mon+tues+weds+thur+fri) as sumall,
  avg(mon) as avgmon,
  avg(tues) as avgtues,
  avg(weds) as avgweds,
  avg(thurs) as avgthurs,
  agv(fri) as avgfri,
MAX((SIGN(spots)-1) + 1) AS beds
from
(
SELECT rooms.name, rooms.id,
CASE WHEN EXTRACT(DOW FROM availables.bookdate) = 1 THEN (availables.price) ELSE 0 END) AS mon,
CASE WHEN EXTRACT(DOW FROM availables.bookdate) = 2 THEN (availables.price) ELSE 0 END) AS tues,
CASE WHEN EXTRACT(DOW FROM availables.bookdate) = 3 THEN (availables.price) ELSE 0 END) AS weds,
CASE WHEN EXTRACT(DOW FROM availables.bookdate) = 4 THEN (availables.price) ELSE 0 END) AS thur,
CASE WHEN EXTRACT(DOW FROM availables.bookdate) = 5 THEN (availables.price) ELSE 0 END) AS fri,
spots, rooms.id, rooms.name
 FROM availables
 INNER JOIN rooms
 ON availables.room_id=rooms.id
 WHERE availables.room_id = '1780' AND availables.price > 0
) 
 GROUP BY rooms.id, rooms.name
)

примечание: я не проверял, поэтому возможны опечатки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...