Select sg_gameno, Max(sg_Year), sg_end, sg_hostcity, country_olympic_name
from Summergames s, Country co
where s.country_isocode = co.country_isocode
不知道这有什么不对。我想得到最新的一年。我应该使用MAX还是其他东西。
答案 0 :(得分:1)
在Oracle中,除非各个列包含在GROUP BY子句中,否则SELECT列表中不能包含聚合函数和单个列。
您可以使用RANK或DENSE_RANK函数根据年份对记录进行排名,然后从结果集中选择排名最高的行。
select * from (
select sg_gameno, sg_Year, sg_end, sg_hostcity, country_olympic_name,
rank() over (order by sg_year desc) as ranking
from Summergames s, Country co
where s.country_isocode = co.country_isocode
)
where ranking = 1;
您还可以使用以下查询来获得相同的结果。您必须选择最适合您的那个。
select sg_gameno, sg_Year, sg_end, sg_hostcity, country_olympic_name
from Summergames s, Country co
where s.country_isocode = co.country_isocode
and sg_Year = (select max(sg_Year)
from Summergames s, Country co
where s.country_isocode = co.country_isocode);
答案 1 :(得分:1)
如果要聚合一列(sg_year
)而不聚合其他列,则需要GROUP BY
子句。
Select sg_gameno, Max(sg_Year), sg_end, sg_hostcity, country_olympic_name
from Summergames s,
Country co
where s.country_isocode = co.country_isocode
group by sg_gameno, sg_end, sg_hostcity, country_olympic_name
在语法上是有效的。它是否为您提供您想要的结果是另一个问题 - 您需要告诉我们您的表格是什么样的,其中包含哪些数据,您想要的结果等等。