1

2 つの SQL クエリを 1 つのクエリに結合しようとしています。

最初のものは、ホテルごとの部屋数を取得します。2 つ目は、ホテルにチェックインしたゲストの数を取得します。ホテルごとの稼働率を取得しようとしています。

SELECT hotel_id, count(room_id)  
FROM  room  
group by room.hotel_id

SELECT h.hotel_id, count(k.room_id) 
FROM room_reservation as kr , room as k , hotel as h
where kr.room_id = k.room_id and k.hotel_id = h.hotel_id 
group by k.hotel_id

これどうやってするの ?

4

5 に答える 5

1
select aux.hotel_id, ((coalesce(aux2.total, 0)*1.0)/aux.total)*100 as 'ocupancy rate'
from (SELECT hotel_id, count(room_id) as 'total' 
      FROM  room  
      group by room.hotel_id) aux
LEFT OUTER JOIN (SELECT h.hotel_id, COUNT(k.room_id) as 'total'
                 FROM room_reservation as kr
                 INNER JOIN room as k ON (kr.room_id = k.room_id)
                 INNER JOIN hotel as h ON (k.hotel_id = h.hotel_id) 
                 GROUP BY k.hotel_id) aux2 on aux.hotel_id = aux2.hotel_id
于 2012-06-22T16:19:02.987 に答える
0

これは非常に単純に、テーブル内のホテルの客室数の合計と常に同じかそれ以下の予約が存在し、ホテルの客室のテーブルroom_reservation内の対応する行は 0 または 1 つだけであると仮定して実行できます。room_reservation削除されました(2番目のクエリでは、部屋ごとに最新の予約のみを選択するなどのフィルタリングを行っていないため、そのように見えます):

SELECT 
    a.hotel_id, 
    (COUNT(b.room_id) / COUNT(*))*100 AS occupancy_rate  
FROM 
    room a
LEFT JOIN
    room_reservation b ON a.room_id = b.room_id
GROUP BY 
    a.hotel_id 

だけでなくホテルの詳細が必要な場合はhotel_id、追加INNER JOIN料金が必要です。

于 2012-06-22T17:56:53.507 に答える
0

すべてのクエリを結合し、集計してホテルごとの部屋数/予約数を取得し、次のように割ります。

SELECT hotel_id, 
    COUNT(DISTINCT r.room_id) / CONVERT(decimal, COUNT(*)) * 100.0 AS occupancy_rate
FROM hotel h
    LEFT OUTER JOIN room r ON h.hotel_id = r.hotel_id
    LEFT OUTER JOIN room_reservation rr ON r.room_id = rr.room_id
GROUP BY h.hotel_id
于 2012-06-22T16:34:19.443 に答える
0

これは間違いなく 1 つのクエリで実行できます。1 つの方法は、クエリを結合することです。

ただし、次のようにすると、一気にやりたいことができると思います。

SELECT r.hotel_id, count(distinct k.room_id) as numrooms,
       count(distinct kr.room_id) as numreserved
FROM room k left outer join
     room_reservation kr
     on kr.room_id = k.room_id 
group by r.hotel_id 

テーブルについて詳しく知らないので、私は前向きではありません。特に、予約には客室やホテルにはない時間要素があります。これはクエリにどのように組み込まれていますか?

于 2012-06-22T16:27:42.197 に答える