【问题标题】:SQL Query to find whether a entry if greater than sum of average of whole column +standard deviation of whole columnSQL查询查找是否大于整列平均值之和+整列标准差的条目
【发布时间】:2021-03-01 12:55:44
【问题描述】:

假设我有一张桌子

student Marks
john 30
ron 40

我必须编写一个查询,将输出作为学生姓名和 avg(marks column)+standardeviation(marks column) 或 0 ,如果学生分数大于 avg(marks column)+standardeviation(marks column) 则 avg (marks column)+standardeviation(marks column) else 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 

任何人都可以提出任何建议

【问题讨论】:

    标签: mysql sql average standard-deviation


    【解决方案1】:

    关闭。使用窗口函数。在 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
    

    【讨论】:

    • 非常感谢,如果我必须插入 avg(marks column)+standardeviation(marks column) 而不是 1,那么我应该如何修改我的查询
    • @rinkinag 。 . .这回答了您在这里提出的问题。一个新问题应该作为 new 问题提出。但是,如果您只想要一个包含总体平均值 + 标准差的附加列,那么应该清楚如何在这些解决方案中添加它。
    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2019-08-20
    • 2018-07-12
    • 2013-03-24
    • 2016-04-17
    • 2020-03-19
    • 2018-01-20
    相关资源
    最近更新 更多