SQL 查询某条目是否大于整列平均值+整列标准差之和

SQL Query to find whether a entry if greater than sum of average of whole column +standard deviation of whole column

假设我有一个 table 和

student Marks
john 30
ron 40

我必须编写一个查询,输出学生姓名和 avg(marks column)+standardeviation(marks column) 或 0 ,如果学生成绩大于 avg(marks column)+standardeviation(marks column)然后 avg(标记列)+standardeviation(标记列) 否则 0

我写了一个查询,但它不起作用

select student, case when marks>(select avg(marks)+stddev_pop(marks) from students) then  avg(marks column)+standardeviation(marks column) when  marks=(select avg(marks)+stddev_pop(marks) then marks else 0 end as final_marks from students 

请任何人提出任何建议

关闭。使用 window 函数。在 MySQL 中,您不需要 case,因为支持布尔值:

select s.student,
       (s.marks > avg(s.marks) over () + stddev_pop(s.marks) over ()) as final_marks
from students s;

在 MySQL 的旧版本中,我建议在 from 子句中使用子查询:

select s.*,
       (s.marks > ss.avg_marks + ss.stddev_pop_marks) as final_marks
from students s cross join
     (select avg(s.marks) as avg_marks,
             stddev_pop(s.marks) as stddev_pop_marks
      from students
     ) ss