一个sql语句

zhangsuyunpk521 2010-08-17 01:12:22
现在有一张表
学号 成绩 课程名
1001 85 语文
1001 90 数学
1002 70 语文
1002 100 外语
1003 95 语文
1003 80 数学
1004 95 语文
1004 80 数学
现在要查询出语文成绩比数学成绩高的学生的学号
我是新手,一点思路有没有,路过的高手给下sql语句怎么写啊,谢谢了!~~~~~
...全文
78 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky_pearl 2010-08-17
  • 打赏
  • 举报
回复
这表本身所有科目放在一起 所以不能直接比较 我把这表分成语文和数学
selet a.学号 from 表 a,表 b
where a.学号=b.学号 and a.科目='语文' and b.科目='数学' and a.分数>b.分数
crszf 2010-08-17
  • 打赏
  • 举报
回复
Select A.学号 From Tb A,Tb B Where A.课程名 = '语文' And B.课程名 = '数学' And A.成绩 > B.成绩 And A.学号 = B.学号
feixianxxx 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sqlcenter 的回复:]

SQL code
--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table #(学号 int, 成绩 int, 课程名 varchar(8))
insert into #
select 1001, 85, '语文' union all
select 1001, 90, '数学' union all……
[/Quote]
膜拜...
hokor 2010-08-17
  • 打赏
  • 举报
回复
;WITH TB AS(
SELECT 1001 学号,85 成绩,'语文' 课程名
UNION ALL SELECT 1001,90,'数学'
UNION ALL SELECT 1002,70,'语文'
UNION ALL SELECT 1002,100,' 外语'
UNION ALL SELECT 1003,95,'语文'
UNION ALL SELECT 1003,80,'数学'
UNION ALL SELECT 1004,95,'语文'
UNION ALL SELECT 1004,80,'数学')

select 学号,SUM(case when 课程名 = '语文' then 成绩 else 0 end) [语文成绩]
, SUM(case when 课程名 = '数学' then 成绩 else 0 end) [数学成绩]
from TB group by 学号
having SUM(case when 课程名 = '语文' then 成绩 else 0 end) > SUM(case when 课程名 = '数学' then 成绩 else 0 end)

/*
学号 语文成绩 数学成绩
1002 70 0
1003 95 80
1004 95 80
*/
SQLCenter 2010-08-17
  • 打赏
  • 举报
回复
--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table #(学号 int, 成绩 int, 课程名 varchar(8))
insert into #
select 1001, 85, '语文' union all
select 1001, 90, '数学' union all
select 1002, 70, '语文' union all
select 1002, 100, '外语' union all
select 1003, 95, '语文' union all
select 1003, 80, '数学' union all
select 1004, 95, '语文' union all
select 1004, 80, '数学'

select * from # as t where 课程名 = '语文' and not exists (select 1 from # where 学号=t.学号 and 课程名='数学' and 成绩>t.成绩)

/*
学号 成绩 课程名
----------- ----------- --------
1002 70 语文
1003 95 语文
1004 95 语文
*/
王向飞 2010-08-17
  • 打赏
  • 举报
回复
--> 测试数据:Stu
if object_id('Stu') is not null
drop table Stu

---->建表
create table Stu([学号] int,[成绩] int,[课程名] varchar(4))
insert Stu
select 1001,85,'语文' union all
select 1001,90,'数学' union all
select 1002,70,'语文' union all
select 1002,100,'外语' union all
select 1003,95,'语文' union all
select 1003,80,'数学' union all
select 1004,95,'语文' union all
select 1004,80,'数学'



--> 查询结果
SELECT a.*,b.课程名,b.成绩 FROM Stu a,Stu b
where a.学号 = b.学号 and a.成绩>b.成绩
and a.课程名='语文'
--> 删除表格
--DROP TABLE Stu
百年树人 2010-08-17
  • 打赏
  • 举报
回复
---测试数据---
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([学号] int,[成绩] int,[课程名] varchar(4))
insert [tb]
select 1001,85,'语文' union all
select 1001,90,'数学' union all
select 1002,70,'语文' union all
select 1002,100,'外语' union all
select 1003,95,'语文' union all
select 1003,80,'数学' union all
select 1004,95,'语文' union all
select 1004,80,'数学'

---查询---
select distinct a.学号
from tb a,tb b
where a.学号=b.学号
and a.课程名='数学' and b.课程名='语文'
and a.成绩<b.成绩

---结果---
学号
-----------
1003
1004

(2 行受影响)
hokor 2010-08-17
  • 打赏
  • 举报
回复
select 学号 from TB group by 学号 
having SUM(case when 课程名 = '语文' then 成绩 else 0 end) > SUM(case when 课程名 = '数学' then 成绩 else 0 end)

34,590

社区成员

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

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