• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

10 mensagens neste tópico

Tou a aprender SQL e deparo-me com um problema que não sei como resolver. É o seguinte:

Tenho as seguintes tabelas:

Hotel (hotelNo, hotelName, city)

Room (roomNo, hotelNo, type, price)

Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo)

Guest (guestNo, guestName, guestAddress)

A pergunta é a seguinte:

What is the lost income from unoccupied rooms at each hotel today?

Se alguém puder ajudar agradeço. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O meu SQL está bastante inferrujado mas será coisa para:

SELECT sum(price)
FROM room
WHERE dateFrom > <data actual> AND roomNo not in (SELECT roomNo FROM booking)

Não me lembro que função se usa para obter a data actual... E sinceramente não sei se isto vai funcionar... tenho as minhas dúvidas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esquece que não li bem o exercicio, isso não vai fazer o que queres....

Só ia dar para um hotel.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O meu SQL está bastante inferrujado mas será coisa para:

SELECT sum(price)
FROM room
WHERE dateFrom > <data actual> AND roomNo not in (SELECT roomNo FROM booking)

Não me lembro que função se usa para obter a data actual... E sinceramente não sei se isto vai funcionar... tenho as minhas dúvidas.

SELECT sum(price)
FROM room
WHERE dateFrom >= <dataActual> AND dateTo <= <dataActual>  AND roomNo not in (SELECT roomNo FROM booking)

O formato das datas é secundario, pode ficar como pus.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se isso estivesse em português era mais fácil ajudar.

se eu percebi minimamente a questão tens, que usar um "GROUP BY" para agrupar os quartos por hotel, e depois usas o "SUM" para somar o valor para cada hotel.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se isso estivesse em português era mais fácil ajudar.

Pois essa também é uma dificuldade extra para mim. Mas penso que a pergunta é "Qual é o dinheiro perdido pelos quartos desocupados nesse Hotel hoje?"

SELECT sum(price)
FROM room
WHERE dateFrom >= <dataActual> AND dateTo <= <dataActual>  AND roomNo NOT IN 
                (SELECT guestNo 
                 FROM booking
                 ORDER  BY guestNo)

Não será algo do género?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas penso que a pergunta é "Qual é o dinheiro perdido pelos quartos desocupados nesse Hotel hoje?"

acho que é o dinheiro perdido em cada hotel. se for esse o caso, isto deve dar:

SELECT Room.hotelNo,SUM(Room.price)
        FROM Room,Booking
        WHERE Room.roomNo=Booking.roomNo AND 
                NOT (dateFrom <= <dataActual> AND dateTo >= <dataActual>)
        GROUP BY Room.hotelNo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A internet é um mundo fabuloso... :D

Encontrei a seguinte resolução do problema:


SELECT h.hotelno, SUM(price)
FROM room r
WHERE roomno NOT EXIST
    (SELECT *
     FROM booking b, hotel h, room r
     WHERE b.hotelno = h.hotelno AND r.roomno = b.roomno AND  r.hotelno = b.hotelno AND datefrom <= ‘SYSTEM DATE’ AND  dateto >= ‘SYSTEM DATE’ )
     GROUP BY hotelno;

Penso que se assemelha ao que tu respondeste Rui Carlos  ;)

Agora vou tentar perceber isto como deve ser...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora