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
假设我有一个 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