2010-11-27 67 views
2

我有一個表articles,其中有id,rating(一個從1-10的整數)和category_id(表示它屬於哪個類別的整數)的表。SQL:在每個類別中找到最高評分的文章

如何在一個MySQL查詢中找到每個類別中評分最高的單篇文章? ORDER BYLIMIT通常會是我會如何找到評級最高的文章,但我不知道如何將它與分組混合以獲得所需的結果,如果我可以的話。 (A相關子查詢可能會是一個簡單的答案,但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

試試這些

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; 
+0

那些看起來像他們應該這樣做。我想看看那些令人震驚的SQL嚮導之一是否可以在沒有子查詢的情況下發布一些東西,因爲我之前遇到過那些令人厭煩的事情,但是,如果沒有,這應該會有所訣竅:)謝謝! – Matchu 2010-11-27 21:20:41

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;