Как подсчитать количество клиентов? - PullRequest
0 голосов
/ 25 мая 2018


Мне нужна помощь с SQL-запросом.
Допустим, у нас есть пример базы данных, которая управляет бронированиями в отеле:

Customer(ID, name, birthDate, city);
Room(number, floor, beds, roomtype, price);
Bookings(Customer, roomNumber, floor, checkInDate, checkOutDate);

Мне нужно знать, какие клиенты заказали только иТОЛЬКО экономичный тип номеров.Это мой запрос:

select Customer from Bookings
   join Room on(Bookings.num = camera.roomNumber and Bookings.floor= 
   Room.floor)
        where (Bookings.Customer, Bookings.floor) not in (select number, floor from 
        Room where roomType != 'economic')

Моя проблема в том, что этот запрос показывает мне клиентов, которые забронировали номера экономичного класса, но также показывает мне клиентов, которые забронировали номера другого типа.Как я могу ограничить вывод, чтобы получить клиентов, которые забронировали ТОЛЬКО экономичные номера?Спасибо

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Использование not exists:

select c.*
from Customer c
where not exists (select 1 
                  from Bookings b
                  inner join Room r on b.num = r.roomNumber and b.floor = r.floor
                  where c.ID = b.Customer and r.roomType <> 'economic'
                  );
0 голосов
/ 25 мая 2018

Вы можете использовать агрегацию:

select b.Customer
from Bookings b join
     Room r
     on b.num = r.roomNumber and b.floor = r.floor
group by b.Customer
having min(roomType) = max(roomType) and min(roomType) = 'economic';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...