Строка SQL SELECT с наибольшим значением, где то же значение problem_id

Я работаю над проектом, в котором я должен перечислить решения с наибольшим количеством голосов по каждой проблеме.

Каждая проблема имеет два решения, и пользователи могут голосовать за одно решение для каждой проблемы. Это моя база данных на данный момент.

+----------+------------+---------+
|    id    | id_problem |  vote   |
+----------+------------+---------+
|    1     |     1      |    25   |
|    2     |     1      |    10   |
|    3     |     2      |    18   |
|    4     |     2      |    2    |
|    5     |     3      |    6    |
|    6     |     3      |    7    |
|    7     |     4      |    11   |
|    8     |     4      |    4    |
|    9     |     5      |    5    |
|    10    |     5      |    2    |
+----------+------------+---------+

Я хотел бы получить этот результат:
(Строка с наибольшим количеством голосов за id_problem)

+----------+------------+---------+
|    id    | id_problem |  vote   |
+----------+------------+---------+
|    1     |     1      |    25   |
|    3     |     2      |    18   |
|    6     |     3      |    7    |
|    7     |     4      |    11   |
|    9     |     5      |    5    |
+----------+------------+---------+

0

Решение

SELECT
id,
id_problem,
max(vote)
from
tablename
group by
id_problem
order by
id_problem ASC

Максимум (голосование) определяет больший голос, но он агрегирует результат, затем вам нужно сгруппировать по id_problem, а затем упорядочить его как asc.

0

Другие решения

Ты можешь использовать group by пункт с max функция агрегирования для получения ожидаемого результата, например:

select id, id_problem, max(vote) as vote
from result
group by id_problem
order by id_problem

Вот SQL Fiddle.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector