mysql语句

按班级分组,然后求出每个班分数大于平均值的人数,使用group by和having应该怎么写那

FineReport 青鸟ekko 发布于 2021-3-30 10:41 (编辑于 2021-3-30 11:07)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
1
Z4u3z1Lv6专家互助
发布于2021-3-30 10:55(编辑于 2021-3-30 12:08)

描述有点不清楚:

1、各班内>各班平均分

image.png

2、各班大于年级平均分

image.png

  • 青鸟ekko 青鸟ekko(提问者) 这个思路应该是对的,但join之后有问题
    2021-03-30 11:27 
  • 青鸟ekko 青鸟ekko(提问者) 虽然我想用group by 和having来写,但这个绕点路也能获取结果,如果可以的话,帮忙写下having的写法
    2021-03-30 14:02 
  • Z4u3z1 Z4u3z1 回复 青鸟ekko(提问者) SELECT A.班级,AVG(A.分数) 成绩 AS A GROUP BY A.班级 HAVING AVG(A.分数)>(SELECT AVG(B.分数) 成绩 AS B )
    2021-03-30 14:40 
最佳回答
0
snrtuemcLv8专家互助
发布于2021-3-30 10:46

HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集。HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。语法:

SELECT column1, column2, ... column_n, aggregate_function (expression)

FROM tables

WHERE predicates

GROUP BY column1, column2, ... column_n

HAVING condition1 ... condition_n;

同样使用本文中的学生表格,如果想查询平均分高于80分的学生记录可以这样写:

SELECT id, COUNT(course) as numcourse, AVG(score) as avgscore

FROM student

GROUP BY id

HAVING AVG(score)>=80;

  • 青鸟ekko 青鸟ekko(提问者) 你这个我也看过,值大于平均值,而非一个固定值
    2021-03-30 11:07 
  • snrtuemc snrtuemc 回复 青鸟ekko(提问者) 那你就HAVING score>=AVG(score);不就可以了
    2021-03-30 11:19 
  • 青鸟ekko 青鸟ekko(提问者) 回复 snrtuemc 值不对
    2021-03-30 11:26 
  • 2关注人数
  • 432浏览人数
  • 最后回答于:2021-3-30 12:08
    请选择关闭问题的原因
    确定 取消
    返回顶部