我的介绍数据库作业中的一个问题是:
“6。对于至少进行过一次预订的每位客人,请列出客人编号和客人预订总数,按客人编号排序。”
我的表格是:
create table Guest (
Guest_No char(6),
Guest_Name char(30) not null,
Address char(40),
constraint Guest_PK
primary key (Guest_No)
);
create table Booking (
Hotel_No char(3),
Guest_No char(6) not null,
Date_From date,
Date_To date not null,
Room_No char(4),
constraint Booking_PK
primary key (Hotel_No, Room_No, Date_From),
constraint Booking_Guest_FK
foreign key (Guest_No) references Guest
);
我遇到的问题是我应该如何计算每位客人预订的数量。
我尝试过选择Guest_No和预订次数,但在此之后我不确定该去哪里。
答案 0 :(得分:2)
这只是一项分组练习。
SELECT Guest_No, COUNT(*)
FROM Booking
GROUP BY Guest_No
ORDER BY Guest_No
GROUP BY
子句确保您每个Guest_No
值返回一行结果集; COUNT(*)
计算匹配的行数' Guest_No
。
您不需要加入,因为约束Booking_Guest_FK
可确保预订表中仅存在有效的客人。
答案 1 :(得分:1)
您可以使用JOIN
和聚合:
SELECT g.GuestNo, COUNT(b.GuestNo) AS cnt
FROM Guest g
JOIN Booking b --use LEFT JOIN to get all guests even without
ON g.GuestNo = b.GuestNo --any booking
GROUP BY g.GuestNo
ORDER BY g.GuestNo ASC;
答案 2 :(得分:1)
非常简单 - 只需使用分组
select guest_no, count(guest_no)
from booking
group by guest_no
order by guest_no;
我不知道为什么我们需要加入另一张桌子,除非你想要花哨。