簡體   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