所以任务是:找到每个评级中最年轻的水手
-
我的桌子:
Sailors(sid : integer, sname : string, rating : integer, age : real)
Reserves(sid : integer, bid : integer, day : date)
Boats(bid : integer, bname : string, color : string)
-
这样的事情是否可能:
select min(age)
from sailors
where rating =(1++)
答案 0 :(得分:0)
SELECT rating, MIN(age)
FROM Sailors
GROUP BY rating;
请参阅aggregate functions上的MySQL文档。
答案 1 :(得分:0)
select rating,
min(age)
from sailors
where rating in ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 )
group by rating;
但如果评级是一个表格,那就像
select rating.id,
min(age)
from sailors inner join rating
where rating.id = sailors.rating
group by rating.id;
以此作为子查询,你可以得到这样的最年轻的水手:
select h.rating,
sailor.sname,
sailor.age
from sailor
inner join
( select rating,
min(age) min_age
from sailors inner join rating
where rating.id = sailors.rating
group by rating.id;
) h
where h.rating = sailor.rating
and h.min_age = sailor.age;
答案 2 :(得分:0)
您应该使用GROUP BY
。
SELECT MIN(age), rating
FROM Sailors
GROUP BY rating
答案 3 :(得分:0)
select rating,sid,age
from Sailors as S
where (age,rating)
in
(
select min(age),rating
from Sailors
group by rating
)
编辑:
您可以select rating,min(age) from sailors group by rating;
来获得评分等级的最低年龄,但是您无法获得具有该最低年龄的水手的详细信息。
检查此http://sqlfiddle.com/#!9/55276/1,您可以看到sid的返回值为5而不是8,等级为4 ...
这个http://sqlfiddle.com/#!9/55276/3正确返回sid的位置