Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 具有唯一名称的热门文章_Sql_Dql - Fatal编程技术网

Sql 具有唯一名称的热门文章

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

我需要选择与uniqune名称排名最高的文章。我有一张物品表:

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的文章的平均评分,但它应该返回最好的一个最高评级的平均评级是的,我有。它选择所有文章。使用相同名称的事件。