如何通过"计算" (不是MySQL功能)值?

时间:2017-05-10 11:41:21

标签: mysql

有学生和他们的分数:

Student:
ID NAME
1  a
2  b
3  c
4  d

Mark:
ID STUDENT_ID MARK
1  1          4
1  1          2
1  3          4

我想获得一个关于其平均分数的有序列表,以获得:

a, (4+2)/2
b, -,
c, 4/1
d, -

我不能在选择时计算它,甚至不能将它存储在Students表的列中。有趣的是我想要订购和限制(分页)结果。为了得到正确的排序,我必须知道所有的平均值 - 所以我不使用SELECT查询而没有LIMIT。但是怎么样?理想情况下,按ID或NAME排序很容易。

2 个答案:

答案 0 :(得分:1)

您可以通过表达式进行排序,包括子查询:

order by (select avg(mark) from marks m where m.student_id = s.id)

我不确定我是否愿意将此作为分页的一部分,除非基础数据非常小。

答案 1 :(得分:1)

您可以通过此查询获得用户的平均分数:

SELECT student.*, AVG(mark.mark) as average_mark
FROM users
LEFT OUTER JOIN mark m on m.student_id= users.id
GROUP BY users.id
ORDER BY average_mark DESC