Sql 具有唯一名称的热门文章
我需要选择与uniqune名称排名最高的文章。我有一张物品表:Sql 具有唯一名称的热门文章,sql,dql,Sql,Dql,我需要选择与uniqune名称排名最高的文章。我有一张物品表: id name --------------- 1 Article 1 2 Article 1 3 Article 2 投票表: article_id rating -------------------- 1 3 1 2 3 1 当我按名称对文章进行分组时,即使是同名文章的评分,它也会计算平均值 SELECT
id name
---------------
1 Article 1
2 Article 1
3 Article 2
投票表:
article_id rating
--------------------
1 3
1 2
3 1
当我按名称对文章进行分组时,即使是同名文章的评分,它也会计算平均值
SELECT article.name, AVG(vote.rating) rating
FROM article
LEFT JOIN vote ON vote.article_id = article.id
GROUP BY article.name
但我只想得到排名靠前的文章的平均评分。有人知道怎么做吗?谢谢你的建议
编辑:
我想得到这个结果:
name average_rating
--------------------------
Article 1 2.5
Article 2 1
您尝试过按文章id分组吗?您应该改为按文章id分组,因为每个文章id都是唯一的
SELECT article.name, AVG(vote.rating) rating
FROM article
LEFT JOIN vote ON vote.article_id = article.id
GROUP BY article.id
这就是我想要的:
SELECT result.id, result.name, result.rating
FROM (
SELECT article.id AS id, article.name AS name, AVG(vote.rating) AS rating
FROM article
LEFT JOIN vote ON vote.article_id = article.id
GROUP BY article.id
ORDER BY rating DESC
) AS result
GROUP BY result.name
也许,它可以处理得更好,但这只是工作。谢谢你的帮助。如果你是平均分,那么最高评级意味着什么?它是基于某个常量还是仅基于表数据的顶部?您能否发布所需的结果?它是基于表数据的。我已经编辑了这个问题。@DrahomírHanák我不确定问题是什么,您的查询返回了所需的结果-请参阅此演示-@BlueFoots是,但如果我投票支持第二篇文章,我希望得到相同的结果事件-现在我对两篇名为Article1的文章的平均评分,但它应该返回最好的一个最高评级的平均评级是的,我有。它选择所有文章。使用相同名称的事件。