Mysql 如何编写查询以打印获得高于平均分数的学生的ID和姓名?
学生的分数已存储在学生表中。如何编写一个查询来打印获得高于平均分数的学生的ID和姓名。结果应按学生ID的升序排序Mysql 如何编写查询以打印获得高于平均分数的学生的ID和姓名?,mysql,sql,Mysql,Sql,学生的分数已存储在学生表中。如何编写一个查询来打印获得高于平均分数的学生的ID和姓名。结果应按学生ID的升序排序 Column Type ID Integer Name String Score Float 输出格式: 结果应该包含ID和获得高于平均分数的学生的姓名 我尝试的查询: 但这是行不通的。有人能帮我做这个吗?trt这个 选择id、name、AVGscore作为avg_结果 来自学生 按id、名称分组 让AVGscore>选择AVGscore作为来自学生的 SEL
Column Type
ID Integer
Name String
Score Float
输出格式:
结果应该包含ID和获得高于平均分数的学生的姓名
我尝试的查询:
但这是行不通的。有人能帮我做这个吗?trt这个
选择id、name、AVGscore作为avg_结果
来自学生
按id、名称分组
让AVGscore>选择AVGscore作为来自学生的
SELECT
id, name
FROM
( SELECT id, name, avg( score ) AS avg_results FROM student GROUP BY name ) sre,
( SELECT avg( score ) AS tavg FROM student ) ta
WHERE
sre.avg_results > ta.tavg order by id asc
您的sql有一些拼写错误。我理解您的问题: 每个学生在表格中可以有多行 你希望学生的平均分数大于每个学生的平均分数。这是一个不同于总体平均分数的概念,如果不是所有学生都有相同的分数计数,那么这是一个不同的值 如果您运行的是MySQL 8.0,则可以使用窗口函数:
select *
from (
select name, avg(score) as avg_results, avg(avg(score)) over() avg_avg_results
from student
group by name
) t
where avg_results > avg_avg_results
在早期版本中,一个选项使用having子句:
如果要将学生平均数与总体平均数进行比较,则更简单:
select name, avg(score) as avg_results
from student
group by name
having avg(score) > (select avg(score) from student)
Hi@Chameera需要获得高于平均分数的学生不工作=什么?你得到了错误的结果吗?你有错误吗?它会让你的电脑爆炸吗?当您要求代码方面的帮助时,请具体说明。您如何定义总体平均分数:这是所有分数的平均值,还是每个学生平均值的平均值?请显示样本数据以及对应于该样本的预期输出data@GMB这是总平均得分。这是总体平均分。查询只需要打印得分高于平均分的ID和姓名@GMB@merkle:好的,那么您可以使用我答案中的最后一个查询。
select name, avg(score) as avg_results, avg(avg(score)) over() avg_avg_results
from student
group by name
having avg(score) > (
select avg(avg_score)
from (select avg(score) avg_score from students group by name) t
)
select name, avg(score) as avg_results
from student
group by name
having avg(score) > (select avg(score) from student)