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」の間の日付の部屋の合計価格を検索して検索しますが、たとえば、日付 2013-09-21 と 2013-09-22 の値が 0 と 2013- の場合09-20 の値は 25.00 で、クエリは日付範囲全体で 25.00 の合計を返します。特定の日付の値が 0 の場合、これは部屋が利用できないことを意味しますが、1 日でも値が 0 より大きい場合、合計値が 0 より大きいため、クエリは部屋を利用可能として受け入れます.クエリを変更する方法を教えてくださいしたがって、daterange 内の 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 に答える