如何通过“a”订购;“计算的”;(不是MySQL函数)值?

如何通过“a”订购;“计算的”;(不是MySQL函数)值?,mysql,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, - 我不能在选择ing时计算它,甚至不能将它存储在Students表的列中。有趣的是,我想对结果进行排序和限制(分页)。为了有一个正确的顺序,我必须

有学生和他们的分数:

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, -

我不能在选择ing时计算它,甚至不能将它存储在Students表的列中。有趣的是,我想对结果进行排序和限制(分页)。为了有一个正确的顺序,我必须知道所有的平均值-所以我不会无限地使用SELECT查询。但是怎么做呢?理想情况下,按ID或名称排序很容易。

您可以按表达式排序,包括子查询:

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

我不确定是否希望将此作为分页的一部分,除非底层数据非常小。

您可以按表达式排序,包括子查询:

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

我不确定是否希望将此作为分页的一部分,除非底层数据非常小。

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

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

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

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

你失去了我。请参阅,听起来您需要一个中间表,并将其与一些聚合值组合在一起……看起来像SUM(MARK)/COUNT(StudentId)。根据您的限制,我不能在选择时计算它。这听起来像是一个学术练习。如果你能解释一下这个约束的要点,这会有所帮助。请回答你的问题。@AntDC:当然,但这是应该避免的。这是每个选择的开销!你失去了我。请参阅,听起来您需要一个中间表,并将其与一些聚合值组合在一起……看起来像SUM(MARK)/COUNT(StudentId)。根据您的限制,我不能在选择时计算它。这听起来像是一个学术练习。如果你能解释一下这个约束的要点,这会有所帮助。请回答你的问题。@AntDC:当然,但这是应该避免的。这是每个选择的开销!当然,但这是应该避免的。这是每个选择的开销!因此,可以使用“限制”和“偏移”进行分页。您可以限制结果,而不会增加开销。如果我理解错了你的问题,请帮我解决。当然,但这是应该避免的。这是每个选择的开销!因此,可以使用“限制”和“偏移”进行分页。您可以限制结果,而不会增加开销。如果我理解你的问题错了,请给我安排一下。