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 还是其他东西。
如果要聚合一列 ( 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
在语法上是有效的。它是否为您提供了您想要的结果是另一个问题——您需要告诉我们您的表格是什么样的,其中有什么数据,您想要什么结果等。
在 Oracle 中,SELECT 列表中不能有聚合函数和单独的列,除非单独的列包含在 GROUP BY 子句中。
您可以使用 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);