为什么下面的查询是非法的?
假设你有这些表:
Sailors (sid, sname, rating, age),
Reserves (sid, bid, date),
Boats (bid,bname,color)
这个查询:
SELECT S.sname, MAX (S.age)
FROM Sailors as S
答案 0 :(得分:7)
MAX
sql函数需要在聚合上完成。此查询的正确形式为:
select sname, MAX(age)
from sailors
group by sname
答案 1 :(得分:1)
在输出表时,逻辑上具有带有聚合函数的属性而没有group by子句是没有意义的。 从给出的例子中,
SELECT S.sname, MAX (S.age)
FROM Sailors as S
水手表:
S.sname S.age
Sam 5
Mike 20
Tommy 100
假设输出为:
S.sname Max(S.age)
Sam 100
Mike
Tommy
元组(Sam,100)没有任何意义,因为100与Tommy相对应。
答案 2 :(得分:0)
这是无效的,因为您没有GROUP BY
,您将收到此错误:
列'sailors.sname'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
要更正,只需添加GROUP BY
。
SELECT S.sname, MAX(S.age) FROM Sailors as S GROUP BY S.sname