在我的 SQL 中对小于 10 的约束进行分组
Posted
技术标签:
【中文标题】在我的 SQL 中对小于 10 的约束进行分组【英文标题】:Grouping in my SQL for a constraint less than 10 【发布时间】:2019-11-20 18:07:18 【问题描述】:在尝试这个问题时,我不知道应该使用哪个表格,或者我应该join
表格吗?
列出数据库中房间少于 10 间的酒店总数。
酒店(酒店编号、酒店名称、城市)
房间(房间号、酒店号、类型、价格) 预订(hotelNo、guestNo、dateFrom、dateTo、roomNo)
来宾(guestNo、guestName、guestAddress)
我已经尝试在我的声明中只使用一张表Room
SELECT hotelNo
FROM Room
WHERE roomNo < 10
GROUP BY hotelNo;
这是正确的还是我应该使用类似的东西?
SELECT h.hotelNo,r.roomNo
FROM Hotel h JOIN Room r ON h.hotelNo= r.hotelNo
WHERE r.roomNo < 10
GROUP BY hotelNo;
【问题讨论】:
【参考方案1】:假设所有酒店都至少有一个房间,您不需要加入。但是,您确实需要聚合:
select count(*)
from (select r.hotelno
from rooms r
group by r.hotelno
having count(*) < 10
) r;
子查询返回房间少于 10 个的酒店(并且在 rooms
表中,因此它们至少有一个房间)。
外部查询统计此类酒店的数量。
【讨论】:
@Gordon Linoff:r
在查询结束时做了什么,还有 Count (*) 还有其他选项卡。这怎么知道只算酒店?数据库中还有其他表我已经编辑了我的问题以显示它们
@Liam。 . . r
是表别名。正如我在答案中解释的那样,内部查询列出了符合您条件的酒店。外部查询计算列表中的行数。【参考方案2】:
检查具有顺序的计数以应用于组,并计算该查询返回的行数
SELECT COUNT(*)
FROM (
SELECT hotelRo
FROM Room
GROUP BY hotelNo
HAVING COUNT(*)<10
) AS TMP;
【讨论】:
您可以仅使用 Room 表来执行此操作吗?或者这是不正确的 您的意思是只使用一个查询?我认为你不能,因为如果你在子查询中选择 count(*),它将返回每个组的大小而不是整个集合以上是关于在我的 SQL 中对小于 10 的约束进行分组的主要内容,如果未能解决你的问题,请参考以下文章