Этот маленький запрос получит Вас всех победителей и сколько раз он выиграл в порядке убывания:
SELECT
(CASE WHEN `opp1_votes`>`opp2_votes` THEN `opp1` ELSE `opp2` END) `winner`,
COUNT(*) AS `no_of_times`
FROM `matches`
GROUP BY `winner`
ORDER BY `no_of_times` DESC
То, что мы делаем здесь:
- сравнить, какой из них больше от opp1_votes и opp2_votes в разделе CASE WHEN
- Если opp1_votes выше, то мы выводим opp1 в
winner
колонках и наоборот
- Тогда группа результатов по победителю
- Теперь, если подсчитать количество строк, каждый победитель имеет мы получаем число побед каждого победителя
- в результаты отсортированы по no_of_times выиграл
Если вы хотите просто человек с наибольшим количеством побед вы можете добавить LIMIT 1
в конце запроса или вы можете обернуть выше запрос и выбрать максимум (no_of_times) от него как показано ниже:
SELECT `winner`, MAX(`no_of_times`) AS `no_of_times` FROM (
SELECT
(CASE WHEN `opp1_votes`>`opp2_votes` THEN `opp1` ELSE `opp2` END) `winner`,
COUNT(*) AS `no_of_times`
FROM `matches`
GROUP BY `winner`
ORDER BY `no_of_times` DESC
) AS `winners`
Ваш вопрос странный. Мы привыкли иметь таблицу типа (id, opp, opp_votes) и находить max. Почему столбцы дублируются? – KLE
, вероятно, потому, что есть два противника друг против друга, которые он хранит. – Evernoob
Я полагаю, что это система избирательного голосования – Glenner003