我想返回一家酒店的房间总数,并提供该酒店超过 2 间卧室的房间总数。我的代码返回每家酒店的房间总数超过 2 间卧室,但它不返回酒店的房间总数。相反,它只返回拥有 2 个以上卧室的房间总数。
有没有一种简单的方法来修改我的代码来解决这个问题?
我有以下代码:
SELECT
hotel.hotel_id,
hotel.hotel_name,
COUNT(room.room_no) || ' total rooms ' || COUNT(room.room_no)
|| ' have more than 2 bedrooms ' AS ACCOMODATION_AVAILABLE
FROM
hotel
INNER JOIN
room
ON
hotel.hotel_id = room.hotel_id
WHERE
room_bedrooms > 2
GROUP BY
hotel.hotel_id, hotel.hotel_name;
最佳答案
使用条件聚合:
SELECT h.hotel_id, h.hotel_name,
COUNT(*) as total_roms,
SUM(CASE WHEN r.room_bedrooms > 2 THEN 1 ELSE 0 END) as num_3plus
FROM hotel h JOIN
room r
ON h.hotel_id = r.hotel_id
GROUP BY h.hotel_id, h.hotel_name;
我会让你构造字符串。这些信息在单独的列中似乎更有用。
注意表别名的使用。这使得查询更易于编写和阅读。
关于SQL:将总计数与条件计数相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58522614/