mysql - MySQL:计算值的出现次数
问题描述
我希望能够获得显示每家酒店有多少房间类型的数据。像这样的东西:
HotelName RoomName NumOfRooms
--------------------------------------------------------------------
Hotel 1 Queen Guest Room 23
Hotel 1 Queen Guest Room Plus 17
(7+ RoomNames for Hotel 1)
...
Hotel 2 Queen Guest Room 14
Hotel 2 Queen Guest Room Plus 9
(7+ RoomNames for Hotel 2)
...
Hotel 3 Queen Guest Room 9
Hotel 3 Queen Guest Room Plus 6
(7+ RoomNames for Hotel 3)
我只做到了这一点:
SELECT `Hotel`.HotelName, `RoomType`.RoomName FROM `Hotel`
RIGHT JOIN `Room` ON `Hotel`.HotelID = `Room`.HotelID
RIGHT JOIN `RoomType` ON `Room`.TypeID = `RoomType`.TypeID
GROUP BY `RoomID` ORDER BY `RoomID` ASC;
它只会显示每个房间的位置和类型,我只是不知道如何使用它,我相信我应该使用嵌套查询,但我不知道该怎么做。
设置
我有一个酒店数据库,有 3 家酒店,每个酒店都有房间,每个房间都是九种类型之一(客房、客房加号、单人间等......)
酒店:
HotelID HotelName
------------------
1 Hotel 1
2 Hotel 2
3 Hotel 3
房型:
TypeID RoomName
-----------------------------
1 Queen Guest Room
2 Queen Guest Room Plus
3 Single Guest Room
6 more...
房间:
RoomID HotelID TypeID
----------------------
1 1 3
2 1 3
3 1 3
150+ more...
我真的很感激我能得到的所有帮助谢谢!
解决方案
CROSS JOIN
Hotel
并RoomType
获得酒店和房间类型的所有组合。然后LEFT JOIN
Room
将所有房间添加到给定的酒店房间类型组合。如果酒店没有房间类型NULL
值将被添加。然后使用GROUP BY
和count()
来计算酒店拥有的房间类型。
SELECT h.HotelName,
rt.RoomName,
count(r.TypeID)
FROM Hotel h
CROSS JOIN RoomType rt
LEFT JOIN Room r
ON r.HotelID = h.HotelID
AND r.TypeID = rt.TypeID
GROUP BY h.HotelName,
h.HotelID,
rt.RoomName,
rt.TypeID;
除非使用count(*)
count()
不会计算NULL
值。因此,count(r.TypeID)
当酒店没有相应类型的房间时,使用我们得到 0。
(注意:我添加h.HotelID
和rt.TypeId
是GROUP BY
因为可能有不止一种酒店或房间类型同名。)
推荐阅读
- git - 将 git repos 移动到新的 URI:处理子模块
- python - Python:创建一个由 X、Y 坐标和相应计算的 Z 值组成的网格,以生成 XYZ 的 3D 数组
- javascript - 无法合并 mochaweasome 报告
- varnish-vcl - 使用 IP 地址(和端口)
- php - 商店软件安装在配置步骤停止
- php - 在 Windows 上无法识别 PHP 扩展(使用 PHP 7.4)
- microsoft-graph-sdks - GraphServiceClient : No data can be read from the transmission connection: 现有连接已被远程主机关闭
- java - java电报AbilityBot库错误处理
- jsonschema - csv 文件的蛇形样本验证模式
- google-apps-script - 如何使用日历应用程序获取工作地点?