我在MS SQL中有两个表:
表:候选人CandidateId |PositionId
1 1
2 1
3 1
4 2
5 2
6 2
表:投票CandidateId |VoteCount
1 8
2 8
3 4
4 7
5 6
6 7
我想退回这样的桌子
(返回最高票数的候选人名单)
CandidateId |PositionId |VoteCount
1 1 8
2 1 8
4 2 7
6 2 7
如果多行具有相同的最大投票计数,则会显示这两行。我试了很多次,但它总是返回一行。你能帮我吗?我可以使用什么查询?
SELECT * FROM
(
SELECT *, dense_rank() over (partition by PositionId order by VoteCount desc) as rn
FROM yourtable
) d WHERE d.rn = 1
这不使用dense_rank(),应该也适用于MySQL
SELECT t.*
FROM yourtable t
INNER JOIN
(
SELECT PositionId, max(VoteCount) as VoteCount
FROM yourtable
GROUP BY PositionId
) m ON t.PositionId = m.PositionId
AND t.VoteCount = m.VoteCount