Вы можете group by
узнать количество голосов в каждом штате и использовать rank
, чтобы выбрать всех лучших участников голосования:
select stateid
, voteeid
, votes
from (
select stateid
, voteeid
, count(*) as votes
, rank() over (partition by stateid order by count(*) desc)
as rn
from @votes
group by
stateid
, voteeid
) cnt
where rn = 1
Используйте row_number
вместо rank
, если не хотите галстуков.
Для MySQL вы не можете использовать функции ранжирования, поэтому вам нужно добавить дополнительный запрос, чтобы найти максимальное количество голосов в каждом штате:
select cnt.stateid
, cnt.voteeid
, cnt.votes
from (
select stateid
, voteeid
, count(*) as votes
from @votes
group by
stateid
, voteeid
) cnt
join (
select stateid
, max(votes) as maxvotes
from (
select stateid
, voteeid
, count(*) as votes
from @votes
group by
stateid
, voteeid
) cnt2
group by
stateid
) filter_max
on filter_max.stateid = cnt.stateid
and filter_max.maxvotes = cnt.votes
Пример данных SO