求一条SQL语句,有兴趣的来做做这道题目。

kmor1984 2011-09-17 04:18:41
有一张表,结构为: 学号 姓名 选修课号1 分数1 选修课号2 分数2 选修课号3 分数3

问题:要找出学号为1的这位同学的选修课分数最高的那一门选修课的课号。

我的一点思路:这个显然是要用到子查询,用到聚合函数的MAX,但是MAX通常不是对整列来比较么,这要三列来进行比较谁
分数最高,根据这个结果才能查到对应的课号。这个能这样做么???
...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuanzhang5687 2011-09-17
  • 打赏
  • 举报
回复
向高手
致敬!!!!!
kmor1984 2011-09-17
  • 打赏
  • 举报
回复
我错了,你是对的,向高手
致敬!!!!!
dawugui 2011-09-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kmor1984 的回复:]
二楼这种做法,我有点疑问,请你指教:你判断处理做得很,但then 后的结果是一个预置结果,这个在Case语句中是普遍存在的,但是在实际中,我并不知道这个结果的。只有查表才能知道。
[/Quote]你试试就知道了.
kmor1984 2011-09-17
  • 打赏
  • 举报
回复
二楼这种做法,我有点疑问,请你指教:你判断处理做得很,但then 后的结果是一个预置结果,这个在Case语句中是普遍存在的,但是在实际中,我并不知道这个结果的。只有查表才能知道。
dawugui 2011-09-17
  • 打赏
  • 举报
回复

--方法一
select t.*,
case when 分数1 >= 分数2 and 分数1 >= 分数3 then '选修课号1'
when 分数2 >= 分数1 and 分数2 >= 分数3 then '选修课号2'
when 分数3 >= 分数1 and 分数3 >= 分数1 then '选修课号3'
end '分数最高的选修课'
from tb where 学号 = '1'

--方法二(查询所有的人)
select m.* from
(
select 学号 , 姓名 , 选修课号1 选修课号, 分数1 分数 from tb
union all
select 学号 , 姓名 , 选修课号2 选修课号, 分数2 分数 from tb
union all
select 学号 , 姓名 , 选修课号3 选修课号, 分数3 分数 from tb
) m where 分数 = (select max(分数) from
(
select 学号 , 姓名 , 选修课号1 选修课号, 分数1 分数 from tb
union all
select 学号 , 姓名 , 选修课号2 选修课号, 分数2 分数 from tb
union all
select 学号 , 姓名 , 选修课号3 选修课号, 分数3 分数 from tb
) n where m.学号 = n.学号)

--方法三(查询学号 = '1')
select m.* from
(
select 学号 , 姓名 , 选修课号1 选修课号, 分数1 分数 from tb where 学号 = '1'
union all
select 学号 , 姓名 , 选修课号2 选修课号, 分数2 分数 from tb where 学号 = '1'
union all
select 学号 , 姓名 , 选修课号3 选修课号, 分数3 分数 from tb where 学号 = '1'
) m where 分数 = (select max(分数) from
(
select 学号 , 姓名 , 选修课号1 选修课号, 分数1 分数 from tb where 学号 = '1'
union all
select 学号 , 姓名 , 选修课号2 选修课号, 分数2 分数 from tb where 学号 = '1'
union all
select 学号 , 姓名 , 选修课号3 选修课号, 分数3 分数 from tb where 学号 = '1'
) n where m.学号 = n.学号)

--方法四(查询所有的人)
select m.* from
(
select 学号 , 姓名 , 选修课号1 选修课号, 分数1 分数 from tb
union all
select 学号 , 姓名 , 选修课号2 选修课号, 分数2 分数 from tb
union all
select 学号 , 姓名 , 选修课号3 选修课号, 分数3 分数 from tb
) m where not exists = (select 1 from
(
select 学号 , 姓名 , 选修课号1 选修课号, 分数1 分数 from tb
union all
select 学号 , 姓名 , 选修课号2 选修课号, 分数2 分数 from tb
union all
select 学号 , 姓名 , 选修课号3 选修课号, 分数3 分数 from tb
) n where m.学号 = n.学号 and 分数 > m.分数)

--方法五(查询学号 = '1')
select m.* from
(
select 学号 , 姓名 , 选修课号1 选修课号, 分数1 分数 from tb where 学号 = '1'
union all
select 学号 , 姓名 , 选修课号2 选修课号, 分数2 分数 from tb where 学号 = '1'
union all
select 学号 , 姓名 , 选修课号3 选修课号, 分数3 分数 from tb where 学号 = '1'
) m where not exists = (select 1 from
(
select 学号 , 姓名 , 选修课号1 选修课号, 分数1 分数 from tb where 学号 = '1'
union all
select 学号 , 姓名 , 选修课号2 选修课号, 分数2 分数 from tb where 学号 = '1'
union all
select 学号 , 姓名 , 选修课号3 选修课号, 分数3 分数 from tb where 学号 = '1'
) n where m.学号 = n.学号 and 分数 > m.分数)
dawugui 2011-09-17
  • 打赏
  • 举报
回复
select t.*,
case when 分数1 >= 分数2 and 分数1 >= 分数3 then '选修课号1'
when 分数2 >= 分数1 and 分数2 >= 分数3 then '选修课号2'
when 分数3 >= 分数1 and 分数3 >= 分数1 then '选修课号3'
end '分数最高的选修课'
from tb where 学号 = '1'

34,873

社区成员

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

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