如何用SQL按房间客户数量分类查询对应房间ID
错误原因
你当前逻辑的核心问题是误用了COUNT()聚合函数:
COUNT()的作用是统计匹配的行数,并非读取Number of Customers字段本身的数值- 你之前写的
count(Number of Customers)<2实际是判断分组后每组的行数是否小于2,和你需要的「判断单条记录的客户数是否等于2」的需求完全不匹配,因此输出结果不符合预期
正确SQL实现方案
直接使用CASE WHEN条件判断语句读取Number of Customers的字段值做分类即可,注意字段名包含空格,不同数据库需要用对应标识符包裹:
- MySQL:用反引号
`包裹 - SQL Server:用方括号
[]包裹 - PostgreSQL:用双引号
"包裹
场景1:输出每条RoomId对应的分类
以MySQL为例,查询语句如下:
SELECT RoomId, CASE WHEN `Number of Customers` = 2 THEN 'TwoCustomers' WHEN `Number of Customers` > 2 THEN 'Morethan2Customers' END AS CustomerCategory FROM 你的表名;
对应你的示例数据,输出结果为:
| RoomId | CustomerCategory |
|---|---|
| 1 | TwoCustomers |
| 2 | Morethan2Customers |
| 3 | Morethan2Customers |
场景2:按分类聚合,输出每个分类对应的所有RoomId
如果需要把同一分类下的RoomId汇总为一条记录,可以配合聚合函数实现,以MySQL为例:
SELECT CASE WHEN `Number of Customers` = 2 THEN 'TwoCustomers' WHEN `Number of Customers` > 2 THEN 'Morethan2Customers' END AS CustomerCategory, GROUP_CONCAT(RoomId SEPARATOR ',') AS RelatedRoomIds FROM 你的表名 GROUP BY CustomerCategory;
输出结果为:
| CustomerCategory | RelatedRoomIds |
|---|---|
| TwoCustomers | 1 |
| Morethan2Customers | 2,3 |
内容的提问来源于stack exchange,提问作者Mahendran V M
相关产品推荐
相关产品推荐

