我有一个表articles
,其中包含字段id
,rating
(1-10的整数)和category_id
(表示其所属类别的整数) )。
如何在一个MySQL查询中找到每个类别中评分最高的单篇文章?我想,ORDER BY
和LIMIT
通常就是如何找到评分最高的文章,但我不确定如何将其与分组混合以获得所需的结果,如果可以的话。 (一个依赖子查询可能是一个简单的答案,但是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
答案 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;