我有以下表格:
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;
答案 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。