Продолжая дальше от этого вопроса Запрос, чтобы найти статьи с наибольшим рейтингом в каждой категории -
Рассмотрим ту же таблицу -
id | category_id | rating
---+-------------+-------
1 | 1 | 10
2 | 1 | 8
3 | 2 | 7
4 | 3 | 5
5 | 3 | 2
6 | 3 | 6
Есть таблица статей,с полями id, rating (целое число от 1 до 10) и category_id (целое число, представляющее, к какой категории он принадлежит).И если у меня одна и та же цель - получить статьи с самым высоким рейтингом в каждом запросе (это должен быть результат): -
Желаемый результат
id | category_id | rating
---+-------------+-------
1 | 1 | 10
3 | 2 | 7
6 | 3 | 6
Расширение исходного вопроса
Но выполнение следующего запроса -
SELECT id, category_id, max( rating ) AS max_rating
FROM `articles`
GROUP BY category_id
приводит к следующему, где все, кроме поля id
, соответствует желаемому.Я знаю, как сделать это с помощью подзапроса - как ответили на тот же вопрос - Использование подзапроса .
id category_id max_rating
1 1 10
3 2 7
4 3 6
В общих терминах
Без учета сгруппированныхстолбец (category_id
) и вычисляемые столбцы (столбцы, возвращающие результаты агрегатной функции, такие как SUM()
, MAX()
и т. д. - в данном случае max_rating
), значения, возвращаемые в других полях, представляют собой просто первую строку под каждымсгруппированный набор результатов (в данном случае сгруппированный по category_id
).Например, запись с id
= 1 является первой в таблице под category_id
1 (id
1 и 2 под category_id
1), поэтому она возвращается.
Мне просто интересно, нельзя ли как-то преодолеть это поведение по умолчанию, чтобы вернуть строки на основе условий?Если mysql может выполнять вычисления для каждого сгруппированного набора результатов (выполняет подсчет MAX()
и т. Д.), То почему он не может вернуть строку, соответствующую максимальному рейтингу.Разве невозможно сделать это в одном запросе без подзапроса?Это выглядит для меня как частое требование.
Обновление
Я также не мог понять, чего я хочу от решения Naktibalda.И еще раз хочу сказать, я знаю, как сделать это, используя подзапрос, как снова ответил OMG Ponies.