获取属性SQL的每个值的前3个元素

时间:2017-12-21 17:23:45

标签: sql oracle

我正在使用可在此处查询的mondial数据库http://www.semwebtech.org/sqlfrontend/

我正试图在每个大陆上获得最为实用的宗教信仰:

select religion.name, sum(religion.percentage) as total, continent from religion join encompasses on religion.country = encompasses.country group by name, continent order by continent, total DESC

这给了我一个列表,列出每个大陆按其受欢迎程度排序的每个宗教,但我如何获得每个大陆的前3个结果?

我已经查找了光标,但我没有看到如何将它们应用到我的案例中,看起来有一个简单的答案

1 个答案:

答案 0 :(得分:0)

我会使用窗口函数:

select rc.*
from (select r.name, sum(r.percentage) as total, e.continent,
             row_number() over (partition by e.continent order by sum(r.percentage) as total desc) as seqnum
      from religion r join
           encompasses e
           on r.country = e.country 
      group by r.name, e.continent
     ) rc
where seqnum <= 3;

在解释了如何修改查询以回答问题后,现在让我指出您的查询是错误的。人口百分比的总和与总人数不同。例如,我认为不丹非常接近100%的佛教徒(佛教是国教)。但是在印度有更多的佛教徒(根据一个消息来源,约有0.7%的佛教徒。)