在mysql中将COUNT和SELECT转换为同一查询

时间:2018-08-30 16:38:32

标签: mysql

在我的两个表格中,我想选择SUB_Limit并计算房间数(仅活动房间)。

因此查询应返回如下内容:

|-----------|------------|-------------|
| SUB_Limit | ROO_Number | ROO_HotelId |
|-----------|------------|-------------|
|        10 |          0 |           1 |
|        15 |          3 |           2 |
|         5 |          2 |           3 |
|        25 |          0 |           4 |
|-----------|------------|-------------|

为什么这个查询没有返回我想要的输出?

SELECT 
    ROO_HotelId, 
    SUB_Limit, 
    COUNT(ROO_Id) AS ROO_Number
FROM ___Rooms
LEFT JOIN ___Subscriptions
    ON ___Rooms.ROO_HotelId = ___Subscriptions.SUB_HotelId
WHERE ROO_Status = 'active'
    AND SUB_HotelId = 1
    AND ROO_HotelId = 1

实际上,它给了我

|-----------|------------|
| SUB_Limit | ROO_Number |
|-----------|------------|
|        15 |          3 |
|         5 |          2 |
|-----------|------------|

所以我没有___Subscriptions没有房间。

SQL Fiddle寻求帮助。

谢谢。

2 个答案:

答案 0 :(得分:1)

下面的查询为您提供所需的结果。

SELECT 
  SUB_HotelId,
  SUB_Limit, 
  COUNT(ROO_Id) AS ROO_Number  
FROM ___Subscriptions
LEFT JOIN ___Rooms ON 
  ___Rooms.ROO_HotelId = ___Subscriptions.SUB_HotelId
WHERE ROO_Status = 'active' or ROO_Status is null
GROUP BY SUB_HotelId

您需要检查ROO_Status ='active'或NULL,因为如果订阅未链接到房间,则ROO_Status将没有任何值。另外,您还需要对SUB_HotelId进行分组,因为如果没有空间可以加入订阅,则ROO_HotelId也将为null。

链接到小提琴:http://sqlfiddle.com/#!9/c6920c/35

答案 1 :(得分:0)

这是因为未在您的结果中合并ROO_HotelId 选择     SUB_Limit,     COUNT(ROO_Id)AS ROO_Number,ROO_HotelId 从___间客房 右加入___订阅     开启___ Rooms.ROO_HotelId = ___ Subscriptions.SUB_HotelId ROO_Status ='活动' GROUP BY ROO_HotelId