SQL: изменение вывода запроса в зависимости от условия - PullRequest
0 голосов
/ 24 октября 2019

У меня есть таблица HOTEL, в которой хранится информация об отелях. У меня также есть таблица ROOM, в которой хранится информация о номерах в отелях (количество спален и т. Д.)

У меня есть следующий код:

SELECT
    h.hotel_id,
    h.hotel_name,
    COUNT(r.room_no) || ' rooms total, ' 
        || SUM(CASE WHEN r.room_bedoorms > 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;

Код работает нормально, иэто мой вывод:

Screen-Shot-2019-10-24-at-8-19-23-pm.png

Однако я хочу отображать только те отели, в которых есть 1 или более номеров с более чем 2 спальнями. В этом случае я хочу, чтобы в моем выводе отображались только отели 2 и 5.

Может кто-нибудь указать, какие изменения мне нужно внести в мой код для достижения этой цели?

Приветствия!

Ответы [ 3 ]

0 голосов
/ 24 октября 2019

использование с

SELECT
    h.hotel_id,
    h.hotel_name,
    COUNT(r.room_no) || ' rooms total, ' 
        || SUM(CASE WHEN r.room_bedoorms > 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
having SUM(CASE WHEN r.room_bedoorms > 2 THEN 1 ELSE 0 END)>=2
and COUNT(r.room_no)>1
0 голосов
/ 24 октября 2019

Вы можете использовать предложение having. Одна версия использует условное агрегирование:

HAVING SUM(CASE WHEN r.room_bedrooms > 2 THEN 1 ELSE 0 END) > 0

Однако, я думаю, что проще написать:

HAVING MAX(r.room_bedrooms) > 2
0 голосов
/ 24 октября 2019

Просто используйте HAVING предложение

SELECT
    h.hotel_id,
    h.hotel_name,
    COUNT(r.room_no) || ' rooms total, ' 
        || SUM(CASE WHEN r.room_bedoorms > 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
HAVING SUM(CASE WHEN r.room_bedoorms > 2 THEN 1 ELSE 0 END) >= 2 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...