【发布时间】:2018-06-07 09:40:37
【问题描述】:
您好,我在这样的表中有空房:
房间号 |日期 1 | 2018-06-09 00:00:00 1 | 2018-06-10 00:00:00 1 | 2018-06-11 00:00:00 2 | 2018-06-09 00:00:00 2 | 2018-06-11 00:00:00 3 | 2018-06-09 00:00:00 4 | 2018-06-07 00:00:00 ...我发送了一组日期,我想知道任何房间是否全天都有空房:
SELECT rtd.room_id, CASE WHEN Count(rtd.room_id) < 2 THEN 'no' ELSE 'yes' END
FROM room_type_day as rtd
WHERE
rtd.date IN ('2018-06-09 00:00:00', '2018-06-10 00:00:00', '2018-06-11 00:00:00')
GROUP BY rtd.room_type_id
但这让我回过神来:
1 |是的 2 |是的 3 |是的 4 |不如何找到全天都有的房间?
谢谢。
编辑
如果我在“分组依据”之前添加 HAVING(COUNT DISTINCT rtd.date) = 3",则会收到以下错误:
编辑
这对我有用:
SELECT `room_id`
FROM `room_type_day`
WHERE `date` IN ('2018-06-09', '2018-06-10', '2018-06-11')
GROUP BY `room_id`
HAVING COUNT(`room_id`) = 3;
但是如果有一个或多个房间可用,我该如何修改这个查询,返回“yes”,如果没有,返回“no”?
谢谢
【问题讨论】:
-
提示:HAVING 子句。
-
添加
HAVING(COUNT DISTINCT rtd.date) = 3 -
或者换一种思考方式......你能找到在任何日子都没有空房的房间吗? (TB 的解决方案可能过于繁琐)
-
请问你能写出所有的sql吗?如果我在“group by”之前添加“HAVING(COUNT DISTINCT rtd.date) = 3”,则会出现语法错误
-
HAVING 子句将删除答案为“否”的房间。