Mysql 如何编写查询以打印获得高于平均分数的学生的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

学生的分数已存储在学生表中。如何编写一个查询来打印获得高于平均分数的学生的ID和姓名。结果应按学生ID的升序排序

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)