我有一张叫做投票的表
vid stateid voterid voteeid 1 1 1 1 2 1 2 1 3 1 3 1 4 1 4 1 5 1 5 2 6 1 6 2 7 2 7 3 8 2 8 3 9 2 9 4
我想找到每个州一个人的最大票数。
Select Top 1 voteeid from votes where stateid = 1 group by voteeid order by count(voteeid) desc
此查询能够查找单个州的人的最大投票数。
我想为每个州的某个人找到最多票数。总之,我想要一个这样的输出
votes voteeid 4 1 2 3
有人可以指出我正确的方向吗?
由于
答案 0 :(得分:2)
您可以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