Lösningsförslag till några frågor.
Man kan skapa vyer genom
create view inkomst as
select b.reg_nr, sum(u.kostnad) as summa
from bil b, uthyrning u
where b.id = u.bil_id group by b.reg_nr;
och
create view utgift as
select b.reg_nr, sum(k.summa) as kostnad
from bil b, kostnad k
where b.id = k.bil_id
group by b.reg_nr
och då kan man hitta bilen som kostat minst med vyn utgift:
select * from utgift where kostnad =
(select min(kostnad) from utgift);
reg_nr | kostnad
--------+---------
FTE543 | 5380.00
Man kan hitta bilen som ger största vinsten genom att använda båda vyerna:
select reg_nr, summa - kostnad as vinst
from inkomst natural join utgift
where summa - kostnad =
(select max (summa - kostnad) from
inkomst natural join utgift);
reg_nr | vinst
--------+---------
FTE543 | 3145.00
Som koll på att man gjort rätt kan man använda båda vyerna så:
select reg_nr, summa as inkomst, kostnad, summa - kostnad as vinst
from inkomst natural join utgift;
reg_nr | inkomst | kostnad | vinst
--------+---------+---------+----------
FTE543 | 8525.00 | 5380.00 | 3145.00
USB220 | 1697.00 | 7684.00 | -5987.00
UUZ445 | 401.00 | 6591.00 | -6190.00
Och om man med "kostar minst" menar kostnad för kunden är det ju lätt
utan vyer:
select b.reg_nr, k.dygnspris, k.kilometerpris from
bil b, modell m, kategori k
where b.model_id = m.id and m.kategori_id = k.id
and k.dygnspris = (select min (dygnspris) from kategori);
reg_nr | dygnspris | kilometerpris
--------+-----------+---------------
FTE543 | 299.00 | 2.00