用户需求: 

    会员的排名是按照最高积分的前10次积分的和进行排序的。


实际现状:

  1. 目前会员的总积分规则为最近1年内的积分之和;

  2. 积分细节表A,存在字段人员ID(PersonalMember_ID)和积分(CompetitionScore_Point)


计划实现:

    对表A的PersonalMember、CompetitionScore_Point进行分组查询并去最高积分的前10


实现方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
---- 这段sql会产生冗余数据,例如甲的前10积分有两个80分,则查询数据会出现11条数据
select s.PersonalMember_ID, sum(s.CompetitionScore_Point)  
from A s
where 10>(select count(*) from At 
where t.PersonalMember_ID=s.PersonalMember_ID and t.CompetitionScore_Point>s.CompetitionScore_Point)
group by PersonalMember_ID
order by s.PersonalMember_ID, s.CompetitionScore_Point desc;
 
 
--- 正确写法如下:
select a.PersonalMember_ID, a.CompetitionScore_Point
from A a left join A b 
on a.PersonalMember_ID=b.PersonalMember_ID and a.CompetitionScore_Point>b.CompetitionScore_Point
group by a.CompetitionScore_ID,a.PersonalMember_ID, a.CompetitionScore_Point
having count(b.CompetitionScore_ID)<10
order by a.PersonalMember_ID, a.CompetitionScore_Point desc;