SQL: объединение общего и условного количества - PullRequest
2 голосов
/ 23 октября 2019

Я хотел бы вернуть общее количество номеров в отеле, а также указать общее количество номеров в этом отеле, которые имеют более 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;

Ответы [ 2 ]

4 голосов
/ 23 октября 2019

Использовать условное агрегирование:

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;

Я позволю вам построить строку. Информация представляется более полезной в отдельных столбцах.

Обратите внимание на использование псевдонимов таблиц. Это облегчает написание и чтение запроса.

3 голосов
/ 23 октября 2019

Вы можете выполнить условное агрегирование:

SELECT
    h.hotel_id,
    h.hotel_name,
    COUNT(r.room_no) || ' total rooms ' 
        || SUM(CASE WHEN r.room_no > 2 THEN 1 ELSE 0 END) 
        || ' have more than 2 bedrooms ' AS ACCOMODATION_AVAILABLE
FROM hotel h
INNER JOIN room r ON h.hotel_id = r.hotel_id
GROUP BY h.hotel_id, h.hotel_name;

Примечание: псевдонимы таблиц делают запросы короче и проще для понимания. Я изменил ваш запрос, чтобы использовать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...