Skip to Main Content
  • Questions
  • Query for selecting top 10 percent of records

Breadcrumb

Question and Answer

Connor McDonald

Thanks for the question.

Asked: November 19, 2016 - 3:42 am UTC

Last updated: November 19, 2016 - 3:58 am UTC

Version: 11g

Viewed 1000+ times

You Asked

Hi Tom,

I have the requirement of selecting top 10 percent for each group based on score for the below data

"GROUPID" "SCORE"
"group1" 13
"group1" 12
"group1" 10
"group1" 12
"group2" 12
"group2" 13
"group2" 16
"group2" 20
"group2" 22
"group2" 24
"group2" 21
"group2" 23
"group2" 22


create table points
(groupid varchar(10),
score number);

insert into points values ('group1', 13);
insert into points values ('group1', 12);
insert into points values ('group1', 10);
insert into points values ('group1', 12);
insert into points values ('group2', 12);
insert into points values ('group2', 13);
insert into points values ('group2', 16);
insert into points values ('group2', 20);
insert into points values ('group2', 22);
insert into points values ('group2', 24);
insert into points values ('group2', 21);
insert into points values ('group2', 23);
insert into points values ('group2', 22);

I tried the below query but i am unable to get any records. Please help me in this regard

select a.groupid, a.score from (
select groupid, score, dense_rank() over (partition by groupid order by score desc) rn,
count(*) over (partition by groupid) cn
from points) a
where a.rn <= 0.1 * a.cn;

Thank you
Raj

and Connor said...

Try NTILE, explained here at about the half way mark

https://www.youtube.com/watch?v=UBHFeaeeTYU


Is this answer out of date? If it is, please let us know via a Comment

More to Explore

Analytics

Analytic SQL got you confused? Check out Connor McDonald's complete video course.