每种房型和总房数如何计算?
Posted
技术标签:
【中文标题】每种房型和总房数如何计算?【英文标题】:How to count the number of each type of room and total room? 【发布时间】:2016-02-06 09:48:49 【问题描述】:我的查询是这样的:
SELECT name, room_type, room_number FROM table_room
结果是这样的:
我想添加这样的描述:
Single Room : 3 Room
Double Room : 2 Room
Family Room : 1 Room
Total : 6 room
附加信息:
Single Room 1 : Tony
Single Room 2 : Eden
Single Room 3 : Christiano
Double Room 1 : Wayne and Christina
Double Room 2 : Ryan and Jose
Family Room 1 : David, Peter and Carlo
总共:6 个房间,而不是 10 个房间
我试过了。但我还是很难。
谢谢。
确定房间数量,不是根据房型,而是根据房间号
所以根据上表的结果应该是这样的:
Single Room : 3 Room
Double Room : 2 Room
Family Room : 1 Room
Total : 6 room
附加信息:
Single Room 1 : Tony
Single Room 2 : Eden
Single Room 3 : Christiano
Double Room 1 : Wayne and Christina
Double Room 2 : Ryan and Jose
Family Room 1 : David, Peter and Carlo
总共:6 个房间,而不是 10 个房间
对不起,如果我的问题不太清楚
非常感谢
【问题讨论】:
GROUP BY,用 Total 做一个 UNION ALL。 总是尝试在你的 rdbms 标签中包含 sql 问题SqlServer
, mysql
?。某些功能并非在所有数据库上都可用。
伙计们。除非包含ORDER BY
,否则无法保证结果顺序通常以您想要的顺序显示数据,但不能靠运气。如果规划器使用不同的索引或使用多个 cpu 的并行性,结果可能会改变。
您收到了一些很好的答案。要结束您的问题,请将其中一个问题标记为已接受。
【参考方案1】:
您可以通过以下方式获得所需的结果:
select room_type, count(*) as roomcount from test group by room_type
union all
select 'Total', count(*) as roomcount from test
结果:
+-------------+----------+
| room_type | count(*) |
+-------------+----------+
| Double Room | 4 |
| Family Room | 3 |
| Single Room | 3 |
| Total | 10 |
+-------------+----------+
您可以使用 php 检索此结果并将其格式化为您喜欢的格式。
如果您使用的是 MySQL,您甚至可以执行以下操作来直接从数据库中获取格式化输出,如下所示:
select concat(
room_type, ' : ', roomcount,
case when roomcount < 2 then ' Room' else ' Rooms' end
) as outputstring
from (
select room_type, count(*) as roomcount from test group by room_type
union all
select 'Total', count(*) as roomcount from test
) sub_query
结果:
+-----------------------+
| outputstring |
+-----------------------+
| Double Room : 4 Rooms |
| Family Room : 3 Rooms |
| Single Room : 3 Rooms |
| Total : 10 Rooms |
+-----------------------+
【讨论】:
感谢您回答我的问题。尝试检查下面的答案或上面的问题。我添加了其他信息。 附加信息在哪里?你有一张桌子,可以告诉谁在双人房,谁在家庭房? @mosestoh 您需要进一步的帮助吗?如果您对此处提供的任何答案感到满意,您能否接受一个并结束您的问题?【参考方案2】:使用count
或group by
SELECT count(*) as total,room_type FROM table_room group by
room_type
对于整个房间:-
SELECT count(*) as total_room FROM table_room
在单个查询中:-
SELECT count(*) as total,room_type,
(SELECT count(*) FROM table_room) as total_room FROM table_room group by
room_type
【讨论】:
您的脚本会出错,因为您既没有使用 name 列,也没有将其包含在 group by 子句中,也没有聚合它。【参考方案3】:select room_type, count(*) as roomcount from test group by room_type
UNION
select 'Total' as room_type , count(*) as roomcount from test
希望这会有所帮助。
【讨论】:
【参考方案4】:SQL Fiddle
SELECT room_type, COUNT(*) AS total
FROM table_room
GROUP BY room_type
UNION ALL
SELECT 'Total' AS room_type, COUNT(*) AS total
FROM table_room;
【讨论】:
【参考方案5】:取决于你的rdbms,你可以在返回之前构造字符串
我包含一列 order_id
,以便我可以订购并在最后一行显示 total
。
SELECT *
FROM (
SELECT 1 order_id, room_type + ': ' + Count(*) + ' Room' as desc
FROM table_room
GROUP BY room_type
UNION ALL
SELECT 2 order_id, 'Total : ' + Count(*) + ' Room' as desc
FROM table_room
)
ORDER BY order_id
注意:除非包含ORDER BY
注意 2: 最好的方法是让您的查询仅返回组总数
| Double Room | 4 |
| Family Room | 3 |
| Single Room | 3 |
并在 php UI 中计算总数。这样您的查询只有一种类型的数据,不必担心顺序
【讨论】:
以上是关于每种房型和总房数如何计算?的主要内容,如果未能解决你的问题,请参考以下文章
Django - 房间模型需要选择多种房型。一个房间必须至少有一个预定义选择的房型