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

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

很简单的一个SQL语法题,但是就是解决不了。想求一门课程(a001)获得最高分的同学学号和成绩,怎么按以上的语法,是获得所有学了这门课程的同学学号和成绩?
语法并没有错啊?请大家帮忙看看,这个SQL语句出了什么问题?
...全文
138 17 打赏 收藏 转发到动态 举报
写回复
用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 不能这样写
Leshami 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')
问:我正在 NT 上运行 DB2 V7 的黄金代码。我以为联合 DB 支持就意味着我可以连接不同 DB2 数据库中的两个表。 我尝试执行该操作,但没有成功。当我试图创建服务器时,我遇到了各种各样的语法错误。有人这样连接成功了吗 答:是的,这是可以支持的。如果您没有成功,我建议您查看 Admin Guide 中略述的有关联合数据库支持的步骤。然而,我通过使用控制中心来定义必要的别名等。您可能已经这样做了,而此时特定的 SQL 可能让人头疼。这就需要 FDB 开发者进行分析。对于 V7 中的 FDB,SQL 限于只读操作。 问: 顾客在 LDAP 服务器上定义了大量用户。DB2 可以用 LDAP 服务器来认证这些用户吗 答: LDAP 用于 DB2 中只是为了共享编目目录(即数据库和节点)。对于认证支持,我们只关注 Kerberos。 问: DB2 版本 7.1 中“技术预览”部分的介绍中曾经提到过增量备份可是在发行的G.A. 代码或命令参考手册中都没有此特性。是不是该特性推迟发行了?什么时候才可能用上?(下一发行版?补丁程序包?九月份?) 答: 在 DB2 V 7.1 未来的补丁程序包中将可用增量备份。 问:当我试图将我的 DB2 v5 数据库恢复至具有 DB2 v7.1 的新服务器时,得到以下消息。 (4)RalIds1E C:\\db2 restore db cqmsloc1 from m:\db20616 在备份映像中指示的 SQL2548N 数据库代码页“850”同当前磁盘上所指示数据库代码页“437”有所不同。恢复操作失败。 我试图切换 config.sys 为 850,437,但是却无济于事。 劳驾哪位帮忙解决这个问题。 答:我有两种克服该困难的办法,1. 在新机器上安装旧版本,先恢复,然后更新至新版本。 2. 创建一个同名数据库,设置欲设的代码页,然后进行恢复。 问: 客户要从 Oracle 移植到 DB2 UDB,而待移植项目之一就是序列 ID。但是,他们却发现 DB2 UDBV7 中的序列 ID 是在行插入时内部生成的,于是想要知道如何获得所插入行的 ID,以在其应用程序中显示。如果他们需要基于另一个唯一标识符来查询序列 ID 域,这看起来似乎就违背了序列号的用途,并且也增大了从 Oracle 移植的难度。对于插入到 V7 中的一行来说,检索其序列 ID 的方法是什么呢?谢谢。 答:在 V7.1 中提供了一个新函数 IDENTITY_VAL_LOCAL(),它允许应用程序检索插入的 ID 值。这在发行说明中有文档记录。 问: 我已经在 Win98 中安装了 DB2 PE/RC。Oracle NET8 和 SQL*PLUS 也已经安装。我可以针对 Oracle 使用别名。问是否支持这种配置? 答: 不应该这样。声明信中说得清清楚楚: “下列产品需要一套经许可的 DB2 EE 或 EEE 的副本”

34,592

社区成员

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

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