SQL:有多少行具有列的最大值

时间:2014-11-06 19:07:23

标签: sql count max

我确信这是一个非常简单的答案,尽管我没有提出任何建议。大多数是因为我确信我的问题是错误的。

无论如何,让我说我有这个非常简单的表:

表:election_candidates

id | candidate_id | election_id | votes
---------------------------------------
1  | 2            | 1           | 3
2  | 5            | 1           | 3
3  | 3            | 1           | 2

我需要知道两名候选人是否并列。因此,如果有多个候选人获得最多的选票投票。

我知道我可以使用MAX函数来获得最大的选举价值,但这是一个简单的查询,可以让有多少候选人获得给定选举的MAX?

我正在使用PHP和Codeigniter框架,尽管只是一个可以正常工作的查询的一般示例就可以了。

4 个答案:

答案 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)