鉴于下面的以下数据库,我试图找到一种方法,可以从保留表中列出仅使用COUNT()函数保留红船的日子。从表上看,仅应显示星期一和星期日,因为那几天只保留了红船。星期三不应该包括在内,因为当天还保留了一条蓝船。我不确定如何只使用COUNT()来完成此操作。
(水手)
等级评定
布鲁图斯1
安迪8
Horatio 7
生锈的8
鲍勃1
(预订)
sname bname day
安迪·因特拉克星期一
安迪湾星期三
安迪·马林星期六
生锈的海湾周日
生锈的因特拉克星期三
生锈的海军陆战队星期三
鲍勃湾星期一
(船)
bname颜色评级
SpeedQueen白色9
因特拉克红8
海军蓝7
海湾红3
(全天)
天
星期一
星期二
星期三
星期四
星期五
星期六
星期天
到目前为止,我已经设法提出了以下建议,尽管应该只显示星期一和星期日。
select distinct day
from reservation
where (
select count(*)
from reservation r, boat b
where r.day=reservation.day and
r.bname=b.bname and
r.color = 'red')
显示以下内容:
星期一
星期三
星期天
编辑:对表中的间距表示抱歉。我希望这是有道理的。
答案 0 :(得分:1)
SELECT rcount.day
(
SELECT day, COUNT(*) AS cnt
FROM reservations
GROUP BY day
) rcount
JOIN
(
SELECT day, COUNT(*) AS cnt
FROM reservations res JOIN boats b ON res.bname = b.bname
WHERE b.color = 'red'
GROUP BY day
) red_res_count
ON rcount.day = red_res_count.day
WHERE red_res_count.cnt = rcount.cnt
这将获取每天的预订总数,并将它们与每天的红色预订数相加。如果红色预订数=当天的总预订量,则说明只有红色预订数。
答案 1 :(得分:0)
这是一种方法:
select r.day
from reservations r join
boats b
on r.bname = b.bname
group by r.day
having count(*) = count(case when b.color = 'red' then b.bname end);