Как выбрать общую стоимость номеров, забронированных одним и тем же человеком - PullRequest
0 голосов
/ 18 апреля 2019

Я создал таблицу:

Create table rooms
(
roomNo int not null,
hotelNo int not null,
hotelName varchar (40) not null,
roomType varchar (40)
default 'standard' check (roomType in ('single', 'double', 'master', 
'standard', 'president')),
price decimal (8,2) check (price>=0 and price<=99999),
guestNo int null
)

roomNo и hotelNo - первичный ключ, а guestNo - внешний ключ.

Таблица заполняется значениями:

(101, 123456, 'Home','standard',300, 54321)
(101, 654321, 'Ibis','standard',300, Null)
(101, 987654, 'Hiton','president',15000, null)
(222, 987654, 'Hiton','standard',300, 12345)
(321, 987654, 'Hiton','master',1000, 11111)
(333, 123456, 'Home','single',100, null)
(333, 987654, 'Hiton','standard',300, 12345)
(567, 654321, 'Ibis','standard',300, null)
(888, 654321, 'Ibis','single' ,100, null)
(999, 654321, 'Ibis','double' ,200, null) 

Как я могу ответить на вопрос «Выберите общую цену номеров, забронированных одним и тем же человеком?»?

Я хочу получить сумму, равную 600, но на основе этого запроса яполучите 1900:

select sum(price)
from rooms r inner join guests g
on r.guestNo = g.guestNo and g.guestName = g.guestName

1 Ответ

0 голосов
/ 18 апреля 2019

Если вам нужна общая цена для каждого человека, вам нужно сгруппировать по этому значению:

select g.guestNo, sum(r.price)
from rooms r inner join guests g
on r.guestNo = g.guestNo
group by g.guestNo
order by g.guestNo;

   GUESTNO SUM(R.PRICE)
---------- ------------
     11111         1000
     12345          600
     54321          300

Если вас интересуют только гости с более чем одной комнатой, вы можете добавить предложение having, чтобы проверить, сколько их было:

select g.guestNo, sum(r.price)
from rooms r inner join guests g
on r.guestNo = g.guestNo
group by g.guestNo
having count(r.roomNo) > 1
order by g.guestNo;

   GUESTNO SUM(R.PRICE)
---------- ------------
     12345          600

Подробнее .

Ваша модель данных кажется странной, кстати; кажется странным записывать конкретного гостя против комнаты. Возможно, вам следует удалить guestNo из этого списка и иметь другую таблицу, которая связывает комнату с гостем, возможно, для диапазона дат. Цена также может варьироваться, поэтому, возможно, вместо этого она должна быть в этой таблице бронирования или в другой таблице (для учета сезонных цен и т. Д.)?

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