ORDER BY 两列

ORDER BY with two columns

我在 mysql 数据库中有两个 table:

  1. trips(id,name,desc,createdat)
  2. trip_ratings(id,ratingvalue,tripid,userid)

我想获取 100 个按较高平均评分排序的最近旅行。

我尝试了以下 mysql 查询:

SELECT AVG(ratingvalue),tripid,tripcreatedat FROM trip_ratings 
                                        INNER JOIN trips on trip_ratings.tripid = trips.id
                                        GROUP BY trip_ratings.tripid
                                        ORDER BY AVG(ratingvalue) DESC, tripcreatedat DESC
                                        LIMIT 100

但是由于它首先按评分值排序,所以我只得到按较高评分排序的旅行。

是否可以在单个查询中实现?谁能提示我该怎么做?

编辑: 示例: 我在 trip_ratings table 中有这样的数据:

从我尝试过的查询中,我可以得到这样的结果。

但我的问题是:获取 100 个按较高平均评分排序的最近旅行。

除了拒绝投票和关闭投票之外,任何人都可以对此有任何解决方案,或者任何人都可以给我一个提示,说明是否可以在单个查询中实现?谢谢。

一种选择是使用内嵌视图,首先获取“100 个最近的行程”。

然后将其加入 trip_ratings,以计算 "average rating" 并按该结果排序。

SELECT m.id AS tripid
     , AVG(r.ratingvalue) AS average_rating
     , m.tripcreatedat
  FROM ( SELECT t.id
              , t.tripcreatedat
           FROM trips t
          ORDER BY t.tripcreatedat DESC
          LIMIT 100
       ) m
  LEFT
  JOIN trip_ratings r
    ON r.tripid = m.id
 GROUP BY m.id, m.tripcreatedat 
 ORDER BY AVG(r.ratingvalue) DESC

如果有多个行程具有相同的平均评分,则无法确定这些行程的返回顺序。您可以向 order by 添加其他表达式以使其更具确定性。

 ORDER BY AVG(r.ratingvalue) DESC, m.tripcreatedat DESC, m.id DESC

这不是唯一的方法。还有其他方法可以达到相同的结果。