我在mysql数据库中有两个表:
我想按照较高的平均评分排序最近的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表中有这样的数据:
从我尝试过的查询中我可以得到这样的结果。
但我的问题是:按平均评分较高的方式排名最近100次。
有没有人可以为此提供任何解决方案,或者任何人都可以在一个查询中给我一个提示,而不是低估和关闭投票?感谢。
答案 0 :(得分:1)
一种选择是使用内联视图,首先获得“最近100次旅行”。
然后将其加入trip_ratings
,计算“平均评分”并按该结果排序。
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 AVG(r.ratingvalue) DESC, m.tripcreatedat DESC, m.id DESC
这不是唯一的方法。还有其他方法可以达到同等效果。