[英]MySQL query to return rows ordered by averages from another table
我正在为人们上传照片并由陪审团评分的比赛建立数据库。 我有两个表:照片(id、姓名、user_id 和 section_id)和成绩(id、grade、photo_id、juror_id)。 我想要实现的是一个查询,以返回按每张照片的所有等级的平均值排序的所有照片。
例如,如果我们有 2 张 ID 为 1 和 2 的照片,其中照片 1 有两个等级 (5, 6),照片 2 也有两个等级 (8, 10),则第一个返回的行将是 ID 为 2 的照片(平均值的成绩是 9 并且大于 5.5,照片 1) 的平均值。
我怎样才能做到这一点?
这是查询的伪示例
SELECT * FROM photographs ORDER BY AVERAGE(SELECT grade FROM grades)
这是AVG()和 GROUP BY 的工作。
要从你的grades
表中通过照片获得平均成绩,这个子查询就是这样做的。
SELECT AVG(grade) avg_grade,
photo_id
FROM grades
GROUP BY photo_id
该子查询保证为每个photo_id
值返回一行。 所以你可以像这样把它加入到你的photographs
表中。
SELECT avg_grade.avg_grade,
photographs.*
FROM photographs
LEFT JOIN (
SELECT AVG(grade) avg_grade,
photo_id
FROM grades
GROUP BY photo_id
) avg_grade ON photographs.id = avg_grade.photo_id
ORDER BY avg_grade.avg_grade DESC
首先,您需要正确加入您的表,然后获得结果,然后订购 output:
SELECT
p.id,
AVG(g.grade) AS averageGrade
FROM photographs AS p
JOIN grade AS g ON g.photo_id = p.id
GROUP BY p.Id
ORDER BY AVG(g.grade) DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.