【问题标题】:sql sum or aggregate function on pre-fab column with complex query具有复杂查询的预制列上的 sql sum 或聚合函数
【发布时间】:2009-12-02 12:15:32
【问题描述】:

我有一个查询,它从一周中的 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

【问题讨论】:

    标签: sql postgresql aggregate sum average


    【解决方案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
    )
    

    注意我没有测试所以可能有错别字。

    【讨论】:

      猜你喜欢
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多