我有两张桌子:
___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'
但我得到空数据。
你能帮忙吗?
感谢。
答案 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(*)
也应该有效。