SQL过程以获取大多数重复值

时间:2014-11-27 23:49:18

标签: sql oracle plsql oracle-sqldeveloper

我有以下表格:

table Guy{
  ID integer PK,
  Country varchar(50)
}
table Activity{
  id_Act integer PK,
  Guy_ID FK,
  Date_Act date
}

他们有一对一的关系(家伙到活动)。此外,如果有错误,这些表格也很难过。

现在,我想知道多年来国家“XPTO”使用程序进行的活动最多。

这里最好的选择是什么? (使用Oracle SQL,PL SQL)。

编辑:

我开始使用此查询来计算重复值。在这一步之后,我不知道该怎么做。

 Select to_char(A.Date_Act, 'YYYY'), count(to_char(A.Date_Act, 'YYYY')) AS conter
 from GUY G, ACTIVITY A
 where G.ID = A.GUY_ID AND G.COUNTRY = 'XPTO'
 GROUP BY A.Date_Act;

1 个答案:

答案 0 :(得分:1)

您需要按功能分组:

Select to_char(A.Date_Act, 'YYYY'), count(A.id_Act) AS conter
from GUY G join ACTIVITY A on G.ID = A.GUY_ID
where G.COUNTRY = 'XPTO'
GROUP BY to_char(A.Date_Act, 'YYYY');

要获得具有最大活动数量的年份,您可以使用分析函数:

select yr, conter from
    (Select to_char(A.Date_Act, 'YYYY') AS yr, count(A.id_Act) AS conter,
           rank() over (order by count(A.id_Act) desc) rnk
    from GUY G join ACTIVITY A on G.ID = A.GUY_ID
    where G.COUNTRY = 'XPTO'
    GROUP BY to_char(A.Date_Act, 'YYYY')
    ) 
where rnk=1;

如果只需要一行,则为ROW_NUMBER而不是RANK。