选择MAX时不是单组组功能

时间:2013-09-19 04:23:34

标签: sql oracle

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

2 个答案:

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

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