SQL: найти статью с самым высоким рейтингом в каждой категории - PullRequest
3 голосов
/ 28 ноября 2010

У меня есть таблица 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

Я хотел бы, чтобы было возвращено следующее:1014 *

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

Ответы [ 2 ]

3 голосов
/ 28 ноября 2010

Попробуйте эти

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 голосов
/ 28 ноября 2010

Вы также можете использовать подвыбор в качестве цели предложения 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...