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一起用?
     

解决方案 »

  1.   

    1.
    select 学生表.学号,姓名,avg(成绩) from 学生表,成绩表
    where 学生表.学号=成绩表.学号 
    group by 学生表.学号,姓名
    2、是不是聚合函数都要和group by一起用?
    不一定,看你的需求,你也可以SELECT COUNT(*) FROM YOURTABLE
      

  2.   

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

  3.   

    select 学生表.学号,姓名,avg(成绩) from 学生表,成绩表 
    where 学生表.学号=成绩表.学号 
    group by 学生表.学号,姓名
    请问这里为什么要加姓名?
      

  4.   

    sql语法规定:
     select后的列名一般要包含在group by后面,除非该列出现在一个聚集函数当中。你的姓名没有出现在聚集函数当中,自然回出错。