3
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 还是其他东西。

4

2 回答 2

2

如果要聚合一列 ( 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

在语法上是有效的。它是否为您提供了您想要的结果是另一个问题——您需要告诉我们您的表格是什么样的,其中有什么数据,您想要什么结果等。

于 2013-09-19T04:55:19.323 回答
1

在 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);
于 2013-09-19T04:53:47.637 回答