34,590
社区成员
发帖
与我相关
我的任务
分享
--2000
SELECT * FROM TB AS T WHERE 10>(SELECT COUNT(1) FROM TB WHERE 科目 = t.科目 AND 分数>T.分数)
--2005
SELECT *
FROM
(
SELECT rid=ROW_NUMBER() OVER(PARTITION BY 科目 ORDER BY 分数 DESC),*
FROM TB
) AS T
WHERE rid<=10
select 科目 , count(1) 合计 , 性别 from
(
select t.* , px = row_number() over(partition by 科目 order by 分数 desc) from tb t
) t where 性别 = '男' and px <= 10
group by 科目 , 性别
--你这个“前10名”到底是怎么定义的,是按分数(前10个不同分数)?
--还是按人头(高分中的前10位)? 当有并列名次(分数相同)的时候怎么处理?
select 科目 , count(1) 合计 , 性别 from
(
select t.* from tb t where 分数 in (select top 10 分数 from tb where 科目 = t.科目)
) t where 性别 = '男'
group by 科目 , 性别