Я работаю над проектом, в котором я должен перечислить решения с наибольшим количеством голосов по каждой проблеме.
Каждая проблема имеет два решения, и пользователи могут голосовать за одно решение для каждой проблемы. Это моя база данных на данный момент.
+----------+------------+---------+
| 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 |
+----------+------------+---------+
SELECT
id,
id_problem,
max(vote)
from
tablename
group by
id_problem
order by
id_problem ASC
Максимум (голосование) определяет больший голос, но он агрегирует результат, затем вам нужно сгруппировать по id_problem, а затем упорядочить его как asc.
Ты можешь использовать group by
пункт с max
функция агрегирования для получения ожидаемого результата, например:
select id, id_problem, max(vote) as vote
from result
group by id_problem
order by id_problem
Вот SQL Fiddle.