小问题,请帮我解答,谢谢

cy527300280 2008-11-18 05:18:07

select 学生表.学号,姓名,avg(成绩) from 学生表,成绩表
where 学生表.学号=成绩表.学号

报错:
服务器: 消息 8118,级别 16,状态 1,行 1
列 '学生表.学号' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。
服务器: 消息 8118,级别 16,状态 1,行 1
列 '学生表.姓名' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。

加了group by:
select 学生表.学号,姓名,avg(成绩) from 学生表,成绩表
where 学生表.学号=成绩表.学号
group by 学生表.学号

报错:
服务器: 消息 8120,级别 16,状态 1,行 1
列 '学生表.姓名' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。


问题:1、姓名 和学号 都在一个表里啊,怎么还报错?
2、是不是聚合函数都要和group by一起用?

...全文
112 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cy527300280 2008-11-18
  • 打赏
  • 举报
回复
明白了,谢谢了
  • 打赏
  • 举报
回复
sql语法规定:
select后的列名一般要包含在group by后面,除非该列出现在一个聚集函数当中。

你的姓名没有出现在聚集函数当中,自然回出错。

cy527300280 2008-11-18
  • 打赏
  • 举报
回复
select 学生表.学号,姓名,avg(成绩) from 学生表,成绩表 
where 学生表.学号=成绩表.学号
group by 学生表.学号,姓名

请问这里为什么要加姓名?
长沙三毛 2008-11-18
  • 打赏
  • 举报
回复
select 学号,姓名,(select avg(成绩) from 成绩表 where 成绩表.学号=学生表.学号) as 成绩 from 学生表
ilovewalk 2008-11-18
  • 打赏
  • 举报
回复
1.
select 学生表.学号,姓名,avg(成绩) from 学生表,成绩表
where 学生表.学号=成绩表.学号
group by 学生表.学号,姓名
2、是不是聚合函数都要和group by一起用?
不一定,看你的需求,你也可以SELECT COUNT(*) FROM YOURTABLE

34,838

社区成员

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

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