2009-12-02 33 views
0

我有一个查询需要从一周的7天内获取平均数据(价格)很长的时间间隔。 IE的平均价格为星期一,tues等。它工作正常,但我不确定如何在同一个查询中总结此查询发现的平均值?总结Day1..Day5复杂查询的预fab列上的sql总结或聚合函数

因为它站立此查询总和从所有的价格... 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

这是应该工作....

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 
) 

注意到我没有测试所以有可能是拼写错误。