在两个表上选择并计算相同的查询

时间:2017-12-26 21:26:39

标签: sql

我有两张桌子:

___Subscriptions

|--------|--------------------|--------------|
| SUB_Id | SUB_HotelId        | SUB_PlanName |
|--------|--------------------|--------------|
| 1      | cus_AjGG401e9a840D | Free         |
|--------|--------------------|--------------|

___Rooms

|--------|-------------------|
| ROO_Id | ROO_HotelId       |
|--------|-------------------|
| 1      |cus_AjGG401e9a840D |
| 2      |cus_AjGG401e9a840D |
| 3      |cus_AjGG401e9a840D |
| 4      |cus_AjGG401e9a840D |
|--------|-------------------|

我想选择SUB_PlanName并使用相同的HotelId计算房间。

所以我试过了:

SELECT COUNT(*) as 'ROO_Count', SUB_PlanName
FROM ___Rooms
JOIN ___Subscriptions
ON ___Subscriptions.SUB_HotelId = ___Rooms.ROO_HotelId
WHERE ROO_HotelId = 'cus_AjGG401e9a840D'

SELECT 
    SUB_PlanName, 
    (
        SELECT Count(ROO_Id) 
        FROM ___Rooms
        Where ___Rooms.ROO_HotelId = ___Subscriptions.SUB_HotelId
    ) as ROO_Count 
FROM  ___Subscriptions
WHERE SUB_HotelId = 'cus_AjGG401e9a840D'

但我得到空数据。

你能帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:0)

每当进行一些聚合(此处为COUNT())时,您需要使用GROUP BY。以下查询将仅为ROO_ID提供SUB_HotelId = 'cus_AjGG401e9a840D'的号码,因为您在WHERE中有此条件。如果您想要所有Hotel_ID的COUNT,那么您只需从此查询中删除WHERE过滤器即可。

SELECT s.SUB_PlanName, COUNT(*) as 'ROO_Count' 
FROM ___Rooms r
JOIN ___Subscriptions s
ON s.SUB_HotelId = r.ROO_HotelId
WHERE r.ROO_HotelId = 'cus_AjGG401e9a840D'
GROUP BY s.SUB_PlanName;

为安全起见,如果您不想重复计算重复COUNT(DISTINCT r.ROO_Id),也可以使用ROO_Id。但是你的表结构似乎有唯一的(非重复的)ROO_Id,因此使用COUNT(*)也应该有效。