请大家帮忙看看SQL语法出了什么问题?

pleasure999 2009-11-03 02:05:29
select 学号,max(成绩)
from cj
where 课程号='a001'
group by 学号,成绩
having 成绩=max(成绩)

很简单的一个SQL语法题,但是就是解决不了。想求一门课程(a001)获得最高分的同学学号和成绩,怎么按以上的语法,是获得所有学了这门课程的同学学号和成绩?
语法并没有错啊?请大家帮忙看看,这个SQL语句出了什么问题?
...全文
143 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
小鹏 2009-11-04
  • 打赏
  • 举报
回复
select 学号,成绩
from cj
where 课程号='a001'
and 成绩= (select max(成绩) from cj where 课程号='a001')
Tony088 2009-11-03
  • 打赏
  • 举报
回复
select 学号,成绩
from cj c1
where exists ( select 课程号, max(成绩) from cj c2
where c2.课程号=c1.课程号 and c2.课程号='a001' group by 课程号
having max(成绩)=c1.成绩 )
luoyoumou 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 samyou 的回复:]
select 学号,max(成绩)
    from cj
where 课程号='a001'

同意5楼。


[/Quote]

-------------------------------------------
select 学号,max(成绩)
from cj
where 课程号='a001'
---------------------------
消息 8120,级别 16,状态 1,第 1 行
选择列表中的列 'cj.学号' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
samyou 2009-11-03
  • 打赏
  • 举报
回复
select 学号,max(成绩)
from cj
where 课程号='a001'

同意5楼。

luoyoumou 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jenny0810 的回复:]
引用 1 楼 sigmod 的回复:
select 学号,成绩
from cj
where 课程号='a001'
      and 成绩= (select max(成绩) from cj)
d
[/Quote]

----这个是肯定不对的:子查询里面是查询所有课程的成绩最高分(不区分课程号)!
jenny0810 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sigmod 的回复:]
select 学号,成绩
from cj
where 课程号='a001'
      and 成绩= (select max(成绩) from cj)
[/Quote]d
luoyoumou 2009-11-03
  • 打赏
  • 举报
回复
create table cj(学号 varchar(10), 课程号 varchar(10), 成绩 int);
insert into cj(学号,课程号,成绩)
select
'TB04001','a001',80 union all select
'TB04002','a002',75 union all select
'TB04003','a001',77 union all select
'TB04004','a002',80 union all select
'TB04005','a001',80;

select 学号,成绩
from cj c1
where exists ( select 课程号, max(成绩) from cj c2
where c2.课程号=c1.课程号 and c2.课程号='a001' group by 课程号
having max(成绩)=c1.成绩 )
-------------------------------------------
TB04001 80
TB04005 80
luoyoumou 2009-11-03
  • 打赏
  • 举报
回复
create table cj(学号 varchar(10), 课程号 varchar(10), 成绩 int);
insert into cj(学号,课程号,成绩)
select
'TB04001','a001',80 union all select
'TB04002','a002',75 union all select
'TB04003','a001',77 union all select
'TB04004','a002',80 union all select
'TB04005','a001',80;

select 学号,成绩
from cj c1
where exists ( select 课程号, max(成绩) from cj c2
where c2.课程号=c1.课程号 and c2.课程号='a001' group by 课程号
having max(成绩)=c1.成绩 )
luoyoumou 2009-11-03
  • 打赏
  • 举报
回复
select 学号,成绩
from cj c1
where exists ( select 课程号, max(成绩) from cj c2
where c2.课程号=c1.课程号 and c2.课程号='a001' group by 课程号
having max(成绩)=c1.成绩 )
fanzhouqi 2009-11-03
  • 打赏
  • 举报
回复
having 不能这样写
清风智语 2009-11-03
  • 打赏
  • 举报
回复
想求一门课程(a001)获得最高分的同学学号和成绩



select 学号,max(成绩)
from cj
where 课程号='a001'

这样就可以了
rocklicong 2009-11-03
  • 打赏
  • 举报
回复
select a.課程號,max(a.成績) ,(select top 1 學號 from cj where 課程號=a.課程號 and 成績=max(a.成績)) as 學號
from sj a group by 課程號
sigmod 2009-11-03
  • 打赏
  • 举报
回复
having子句的search condition 运算符“=”右边必须是一个常量或者子查询语句
直接写max(成绩)不符合语法
pleasure999 2009-11-03
  • 打赏
  • 举报
回复
子查询是可以实现,但是上面的问题在哪里?
pleasure999 2009-11-03
  • 打赏
  • 举报
回复
意思是必须得通过子查询才能实现?
sigmod 2009-11-03
  • 打赏
  • 举报
回复
select 学号,成绩
from cj
where 课程号='a001'
and 成绩= (select max(成绩) from cj)
忆轩辕 2009-11-03
  • 打赏
  • 举报
回复
select 学号,成绩
from cj
where 课程号='a001'
and 成绩= (select max(成绩) from cj where 课程号='a001')

34,838

社区成员

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

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