数据
create table scores
(
sid int,
score int,
cid int
);
insert into scores values
(1, 90, 1),
(1, 59, 2),
(1, 67, 3),
(2, 20, 1),
(2, 30, 2),
(2, 40, 3),
(3, 14, 1),
(3, 13, 2),
(3, 15, 3),
(4, 90, 1),
(4, 90, 2),
(4, 87, 3)
;
sql
select t1.sid, t1.average_score, count(distinct t2.sid) as rank_n
from
(
select sid, avg(score) as average_score
from scores
where sid in
(
select sid from scores
where score <= 60
group by sid
having count(cid) >=2
)
group by sid
) t1
left join
(
select sid, avg(score) as average_score
from scores
group by sid
) t2
on t1.average_score <= t2.average_score
group by t1.sid
order by t1.average_score desc
;
or 先排名再筛选
select t1.sid, t1.average_score, count(distinct t2.sid) as rank_n
from
(
select sid, avg(score) as average_score
from scores
group by sid
) t1
left join
(
select sid, avg(score) as average_score
from scores
group by sid
) t2
on t1.average_score <= t2.average_score
where t1.sid in
(
select sid from scores
where score <= 60
group by sid
having count(cid) >=2
)
group by t1.sid
order by t1.average_score desc
;