如何根据多个房间价格获得平均价格

时间:2012-11-02 02:12:48

标签: php sql codeigniter

我有一个名为room_prices的表,根据指定的日期存储不同的价格。这是样本数据。

id  room_id date_from   date_to     price
1   1                               3500.00
25  1       7/28/2012   7/29/2012   3600.00
27  1       8/24/2012   8/27/2012   3000.00
49  1       11/12/2012  11/16/2012  4000.00

第一行是房间1的默认价格(room_id = 1)。

当客人预订房间时,系统将首先查看room_prices表上的价格。如果在表格中找到了客人预订的日期,它将根据所选日期获得价格,而不是默认价格。

实施例

如果客人预订了从2012年10月11日至11月11日的房间,则价格应为3,500。 如果客人预订了从2012年12月11日至2012年11月14日的房间,则价格应为4,000。

如果客人预订了从2012年10月11日至2012年11月13日的房间,则平均价格应为3750.参见下表:

11/10/2012  3500
11/11/2012  3500
11/12/2012  4000
11/13/2012  4000
            3750

所以我的问题是,是否只有一个SQL代码来获得平均价格。

更新

我试过这个sql无济于事:

SELECT avg(price) as avg_price
                        FROM lf_rooms_prices
                        WHERE room_id = 1
                        AND ((DATE_FORMAT(date_from, '%m/%d/%Y') >= '11/10/2012' 
                        AND DATE_FORMAT(date_from, '%m/%d/%Y') < '11/10/2012') 
                        OR (DATE_FORMAT(date_to, '%m/%d/%Y') > '11/13/2012' 
                        AND DATE_FORMAT(date_to, '%m/%d/%Y') <= '11/13/2012'))
不过,我正在使用codeigniter。

1 个答案:

答案 0 :(得分:1)

AVG()功能,因此要获得平均价格,您的查询应如下所示:

SELECT AVG(`price`) FROM `room_prices` GROUP BY `room_id` 

请参阅文档here。当然,您可以在查询中添加WHERE以缩小您想要的平均值的数据集:

SELECT AVG(`price`) FROM `room_prices` WHERE <CONDITIONS> GROUP BY `room_id` 

修改

完整查询:

SELECT AVG(`price`) FROM `room_prices` 
    WHERE `room_id` = 1
          AND ((DATE_FORMAT(date_from, '%m/%d/%Y') >= '11/10/2012' 
          AND DATE_FORMAT(date_from, '%m/%d/%Y') < '11/10/2012') 
          OR (DATE_FORMAT(date_to, '%m/%d/%Y') > '11/13/2012' 
          AND DATE_FORMAT(date_to, '%m/%d/%Y') <= '11/13/2012'))
GROUP BY `room_id` 

关键是使用GROUP BY