繁体   English   中英

MySQL 查询返回按另一个表的平均值排序的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM