我确信这是一个非常简单的答案,尽管我没有提出任何建议。大多数是因为我确信我的问题是错误的。
无论如何,让我说我有这个非常简单的表:
表:election_candidates
id | candidate_id | election_id | votes
---------------------------------------
1 | 2 | 1 | 3
2 | 5 | 1 | 3
3 | 3 | 1 | 2
我需要知道两名候选人是否并列。因此,如果有多个候选人获得最多的选票投票。
我知道我可以使用MAX
函数来获得最大的选举价值,但这是一个简单的查询,可以让有多少候选人获得给定选举的MAX?
我正在使用PHP和Codeigniter框架,尽管只是一个可以正常工作的查询的一般示例就可以了。
答案 0 :(得分:1)
大多数数据库都支持ANSI标准窗口函数。一种方法是使用rank()
:
select ec.election_id, count(*) as NumTies
from (select ec.*, rank(votes) over (partition by election_id order by votes desc) as seqnum
from election_candidates ec
) ec
where seqnum = 1
group by ec.election_id;
答案 1 :(得分:0)
只是胜利者:
SELECT *
from election_candidates
ORDER BY votes DESC
LIMIT 0,1
答案 2 :(得分:0)
难道你不能做这样的事情:
select e.*
from election_candidates e
inner join (
select election_id, max(votes) as maxVotes,
from election_candidates
group by election_id
) maxVotesPerElectionId on e.election_Id = maxVotesPerElectionId.election_id
and e.votes = maxVotesPerElectionId.maxVotes
这应该让你获得最多票数的候选人(每次选举)。
答案 3 :(得分:0)
这将把所有选举组合在一起,使用rank()按投票选出每个选举,并按照安置顺序列出。 所有候选人都列出并显示他们在每次选举中的表现。
DECLARE @T AS TABLE (id INT,candidate_id INT,election_id INT,votes INT)
INSERT INTO @T VALUES
(1 ,2,1,3),(2 ,5,1,3),(3 ,3,1,2),(4 ,2,2,3),(5 ,5,3,1),(6 ,6,1,4),(7 ,2,3,3),(8 ,1,4,3),
(9 ,1,5,2),(10,4,5,3),(11,5,5,3),(12,6,5,4)
SELECT
election_id,
votes,
RANK() OVER (PARTITION BY election_id ORDER BY votes) AS RANKING,
candidate_id
FROM @T
ORDER BY election_id,
RANK() OVER (PARTITION BY election_id ORDER BY votes)