返回信息流已知学员信息表(学好,班级,学科,姓名,成绩),现要查询出各班语文成绩前10名,并且数学成绩不在倒数10名范围内的人员信息。
请问应该怎么写?
这是一条镜像帖。来源:北邮人论坛 / database / #4984同步于 2010/11/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖
请教一个sql语句怎么写
halasunny
2010/11/5镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
select 姓名 from table where 学号 in (select 学号 from table where 学科='语文' order by 成绩 desc limit 10) and 学号 not in (select 学号 from table where 学科='数学' order by 成绩 limit 10)
这样?
【 在 halasunny (halasunny) 的大作中提到: 】
: 标 题: 请教一个sql语句怎么写
: 发信站: 北邮人论坛 (Fri Nov 5 20:34:07 2010), 站内
:
: 已知学员信息表(学好,班级,学科,姓名,成绩),现要查询出各班语文成绩前10名,并且数学成绩不在倒数10名范围内的人员信息。
:
: 请问应该怎么写?
: --
:
【 在 xw2423 的大作中提到: 】
: select 姓名 from table where 学号 in (select 学号 from table where 学科='语文' order by 成绩 desc limit 10) and 学号 not in (select 学号 from table where 学科='数学' order by 成绩 limit 10)
: 这样?
: 【 在 halasunny (halasunny) 的大作中提到: 】
: ...................
你这个不对,它这个表里有多个班级,是先按班级分组后,再进行成绩筛选。如果他的数学和语文成绩是分不同字段存储的,可以这样。
SELCET 学号 FROM
(
SELECT *, ROW_NUMBER() OVER((PARTITION BY 班级 ORDER BY 语文成绩)AS SORT_ID2
)
WHERE SORT_ID2<11
AND 学号 NOT IN
(
SELECT 学号 FROM( SELECT *, ROW_NUMBER() OVER((PARTITION BY 班级 ORDER BY 数学成绩 DESC)AS SORT_ID) WHERE SORT_ID<11
)
SQL2005 或更高级数据库,有ROWNUMBER,没有ROWNUMBER的话,建一个临时表,将表的数据复制进去,再加一个顺序增加的整形字段,然后从零时表查询即可。
如果语文和数学和在学科成绩一个字段里,加一个CASE 或 IF 判断,这样太复杂,建议用存储过程。
=.= 没看到各班。。。。
【 在 wangjianzhou (缺钱) 的大作中提到: 】
: 你这个不对,它这个表里有多个班级,是先按班级分组后,再进行成绩筛选。如果他的数学和语文成绩是分不同字段存储的,可以这样。
: SELCET 学号 FROM
: (
: ...................