SQL:在每个类别中查找评分最高的文章

时间:2010-11-27 21:09:02

标签: sql mysql

我有一个表articles,其中包含字段idrating(1-10的整数)和category_id(表示其所属类别的整数) )。

如何在一个MySQL查询中找到每个类别中评分最高的单篇文章?我想,ORDER BYLIMIT通常就是如何找到评分最高的文章,但我不确定如何将其与分组混合以获得所需的结果,如果可以的话。 (一个依赖子查询可能是一个简单的答案,但是ewwww。还有更好的东西吗?)

以下数据:

id | category_id | rating
---+-------------+-------
 1 |           1 |     10
 2 |           1 |      8
 3 |           2 |      7
 4 |           3 |      5
 5 |           3 |      2
 6 |           3 |      6

我希望退回以下内容:

id | category_id | rating
---+-------------+-------
 1 |           1 |     10
 3 |           2 |      7
 6 |           3 |      6

2 个答案:

答案 0 :(得分:3)

试试这些

SELECT id, category_id, rating
FROM   articles a1
WHERE rating = 
(SELECT MAX(a2.rating) FROM articles a2 WHERE a1.category_id = a2.category_id)

OR

SELECT * FROM (SELECT * FROM articles ORDER BY rating DESC) AS a1 GROUP BY a1.rating;

答案 1 :(得分:0)

你也可以使用一个子选择作为FROM子句的目标,它看起来很有趣,但却有一个稍微容易理解的查询。

SELECT a1.id, a1.category_id, a1.rating 
FROM articles as a1, 
     (SELECT category_id, max(rating) AS mrating FROM articles AS a2 
      GROUP BY a2.category_id) AS a_inner 
WHERE 
  a_inner.category_id = a1.category_id AND 
  a_inner.mrating = a1.rating;