SQL 子查询问题:
SQL subqueries ques :
我有这 3 个表:
1)Sailors (sid:INT, sname:VARCHAR(30), rating:INT, age:INT)
2)Boats (bid:INT, bname:VARCHAR(30), color:VARCHAR(10))
3)Reserves (bid:INT, sid:INT, day:DATE)
我不知道如何构建显示的查询:
至少预定了2艘不同颜色船的水手们的名字!
您可以为每个水手创建一个组,然后要求该组中至少有 2 个不同的颜色:
select s.sid
, s.sname
, count(distinct b.color) as NumberOfBoatColorsReserved
from Reserves r
join Sailors s
on s.sid = r.sid
join Boats b
on b.bid = r.bid
group by
s.sid
, s.sname
having count(distinct b.color) >= 2
可能有更有效的方法来执行此操作,但这里有一个快速干的解决方案:
SELECT sname FROM Sailors
JOIN Reserves USING (sid)
JOIN Boats USING (bid)
GROUP BY sname, color
HAVING COUNT(sname) >= 2;
已添加选择唯一出价:
SELECT bid FROM Sailors
JOIN Reserves USING (sid)
JOIN Boats USING (bid)
HAVING COUNT(bid) >= 3;
其中 3 表示数据库中的水手总数。这可以单独查询,使用 COUNT
非常简单
我有这 3 个表:
1)Sailors (sid:INT, sname:VARCHAR(30), rating:INT, age:INT)
2)Boats (bid:INT, bname:VARCHAR(30), color:VARCHAR(10))
3)Reserves (bid:INT, sid:INT, day:DATE)
我不知道如何构建显示的查询: 至少预定了2艘不同颜色船的水手们的名字!
您可以为每个水手创建一个组,然后要求该组中至少有 2 个不同的颜色:
select s.sid
, s.sname
, count(distinct b.color) as NumberOfBoatColorsReserved
from Reserves r
join Sailors s
on s.sid = r.sid
join Boats b
on b.bid = r.bid
group by
s.sid
, s.sname
having count(distinct b.color) >= 2
可能有更有效的方法来执行此操作,但这里有一个快速干的解决方案:
SELECT sname FROM Sailors
JOIN Reserves USING (sid)
JOIN Boats USING (bid)
GROUP BY sname, color
HAVING COUNT(sname) >= 2;
已添加选择唯一出价:
SELECT bid FROM Sailors
JOIN Reserves USING (sid)
JOIN Boats USING (bid)
HAVING COUNT(bid) >= 3;
其中 3 表示数据库中的水手总数。这可以单独查询,使用 COUNT
非常简单