1

请帮我解决这个问题:我有以下查询:

select SUM(price) from prices_adverts 
                  where advert_id="15" 
                    and room_type_id="3" 
                    and (date >= "2013-09-20" AND date <"2013-09-23") 
order by price   

这将搜索查找“2013-09-20”和“2013-09-23”之间日期的房间的 SUM 价格,但例如,如果日期 2013-09-21 和 2013-09-22 的值为 0 和 2013- 09-20 的值为 25.00,查询将返回整个日期范围的 25.00 的总和。当特定日期的值为 0 时,这意味着房间不可用,但即使 1 天的值大于 0,查询也会接受房间可用,因为它的总值大于 0。请告诉我如何更改查询因此,即使日期范围内的 1 天的值为 0,则查询将在整个期间返回总值 0。希望您了解此问题的性质,谢谢

4

2 回答 2

2

尝试这个:

IF(SUM(price = 0), 0, SUM(price))

我假设你愿意GROUP BY room_id

另外我建议将数据库中的那些 0 更改为 NULL。因为在某些时候你可能有 0 价格,这不等于不可用。您将无法区分它们,这是不好的。

于 2013-09-20T06:46:57.367 回答
1

我猜你错过了GROUP BY Room_id。所以它应该是这样的:

select room_id, 
       CASE WHEN MIN(price) = 0 THEN 0 ELSE SUM(price) END as priceSum
from prices_adverts 
     where advert_id="15" 
     and room_type_id="3" 
     and (date >= "2013-09-20" AND date <"2013-09-23") 
GROUP BY room_id
ORDER BY priceSum
于 2013-09-20T06:59:46.857 回答