为什么以下查询在sql中是非法的?

时间:2015-10-20 03:58:17

标签: sql database

为什么下面的查询是非法的?

假设你有这些表:

Sailors (sid, sname, rating, age),
Reserves (sid, bid, date),
Boats (bid,bname,color)

这个查询:

SELECT S.sname, MAX (S.age)
FROM Sailors as S

3 个答案:

答案 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