对于至少预订一次的每位客人,请列出客人编号以及他们预订了多少次

时间:2018-03-29 19:42:31

标签: sql

我的介绍数据库作业中的一个问题是:

“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和预订次数,但在此之后我不确定该去哪里。

3 个答案:

答案 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;

我不知道为什么我们需要加入另一张桌子,除非你想要花哨。