有学生和他们的分数:
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排序很容易。
答案 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