嗨我有一个用Java运行的电影推荐程序,有一些SQL,我必须按照从最高等级到最低等级的顺序带回前五部电影推荐每件事都是盛大的,直到我把结果带回来他们不是从最高到最低的顺序,例如数字3是错误的,我只是想知道它的代码是否看起来
+ "SELECT FILM,(film_total_ratings/number_of_ratings) as ratings_rating "
+ "FROM( "
+ "SELECT COUNT(*) as number_of_ratings, FILM, "
+ " SUM(RATING) as film_total_ratings, "
+ " SUM(CASE WHEN EMAIL LIKE '%" + email
+ "%' THEN 1 ELSE 0 END) as rated"
+ " FROM ratings GROUP BY film HAVING rated=0 "
+ "ORDER BY MAX(RATING) Desc" + ") TMP_Film LIMIT 5");
答案 0 :(得分:2)
您需要在外部查询上使用order by
。这是SQL中的一般规则 - 除了在一些非常有限的情况下,不依赖于子查询中的order by
。
这是一个很好的建议,但更好的建议是按照你真正想要的顺序排序。因此,请执行以下操作:
,而不是LIMIT 5
ORDER BY ratings_rating DESC
LIMIT 5
按正确的方式排序(在这种情况下,外部查询中的计算列)应该可以解决您的问题。
编辑:
查询如下所示:
SELECT FILM, (film_total_ratings/number_of_ratings) as ratings_rating
FROM (SELECT COUNT(*) as number_of_ratings, FILM,
SUM(RATING) as film_total_ratings, "
SUM(CASE WHEN EMAIL LIKE '%" + email + "%' THEN 1 ELSE 0 END) as rated
FROM ratings GROUP BY film HAVING rated=0 "
) TMP_Film
ORDER BY ratings_rating DESC
LIMIT 5