在线等,如何选出各科成绩的前10名的男同学有多少个

kenpa 2009-10-19 01:13:36
表结构为:
科目,分数,姓名,性别
英语 90 xxx 男
语文 88 aaa 女
英语 88 ddd 男

要求得到每个科目前10名中的男同学合计数,结果要求如下

科目 合计 性别
英语 3 男
语文 6 男


...全文
112 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2009-10-19
  • 打赏
  • 举报
回复
哦 还差个性别='男'的条件 自己加上吧
--小F-- 2009-10-19
  • 打赏
  • 举报
回复
--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
jenny0810 2009-10-19
  • 打赏
  • 举报
回复
xx
--小F-- 2009-10-19
  • 打赏
  • 举报
回复
dawugui 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kenpa 的回复:]
好象是可以,但是选出来的数据, 科目那列,为什么是"不支持的数据类型"
我用的是 sql server 2005
[/Quote]不可能吧.如果是2005更简单.

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 科目 , 性别
luoyoumou 2009-10-19
  • 打赏
  • 举报
回复
--你这个“前10名”到底是怎么定义的,是按分数(前10个不同分数)?
--还是按人头(高分中的前10位)? 当有并列名次(分数相同)的时候怎么处理?
luoyoumou 2009-10-19
  • 打赏
  • 举报
回复
--你这个“前10名”到底是怎么定义的,是按分数?还是按人头?
--当有并列名次(分数相同)的时候怎么处理?
kenpa 2009-10-19
  • 打赏
  • 举报
回复
好象是可以,但是选出来的数据, 科目那列,为什么是"不支持的数据类型"
我用的是 sql server 2005
kenpa 2009-10-19
  • 打赏
  • 举报
回复
这个,我试试
dawugui 2009-10-19
  • 打赏
  • 举报
回复
select 科目 , count(1) 合计 , 性别 from
(
select t.* from tb t where 分数 in (select top 10 分数 from tb where 科目 = t.科目)
) t where 性别 = '男'
group by 科目 , 性别
kenpa 2009-10-19
  • 打赏
  • 举报
回复
最好是写个视图,谢了

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧