【问题标题】:SQL - list of student ids and average mark in 2 decimal placesSQL - 学生 ID 列表和小数点后 2 位的平均分数
【发布时间】:2020-04-04 12:50:52
【问题描述】:

问题:如果学生的平均分大于 80,则编写一个查询以显示学生 id 和平均分的列表(以小数点后 2 位显示)。将平均分的别名命名为 avg_mark。根据平均分对结果进行排序。

Schema for reference

我写了这个查询,但结果与预期的输出不匹配。

select student_id, round(avg(value)) as avg_mark 
from mark
where value>80    -------well this is wrong as I need to compare with an average of value
group by student_id
order by avg_mark

运行此查询会给出错误的输出 [链接如下]

Output

谢谢!!!

【问题讨论】:

  • 请仅使用您实际使用的数据库进行标记。

标签: sql average


【解决方案1】:

你想要having而不是where

select student_id, round(avg(value)) as avg_mark 
from mark
group by student_id
having avg(value) > 80 
order by avg_mark

【讨论】:

    【解决方案2】:

    改用这个函数

    round(avg(value), 2)
    

    这会有所帮助

    【讨论】:

      【解决方案3】:

      下面的代码应该可以正常工作。

      select student_id, cast(avg(value) as decimal(10,2)) as avg_mark from mark
      group by student_id
      having avg(value)>80
      order by avg_mark;
      

      【讨论】:

      • 虽然这个代码块可能会回答这个问题,但最好能稍微解释一下为什么会这样。
      【解决方案4】:

      试试这个:

      select student_id, round(avg(value)) as avg_mark 
      from mark
      group by student_id
      having avg(value) > 80
      group by student_id 
      order by avg_mark
      

      【讨论】:

        【解决方案5】:

        select studid, FirstName, trunc(months_between(sysdate,dob)/12) as Age from student order by studid;

        【讨论】:

        • 你好@user15795958。欢迎来到 SO。请考虑查看How do I write a good answer? 以潜在地改进您的答案。一个简单的改进是将答案中的代码格式化,将其放入代码块中。
        猜你喜欢
        • 2014-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-16
        • 1970-01-01
        • 2019-01-08
        • 1970-01-01
        • 2012-10-18
        相关资源
        最近更新 更多