2013-10-08 28 views
3

我有一个多名候选人和民意调查的选举结果表。我需要确定哪个候选人每次投票得票最多。哪一行的值最高?

下面是在表中的数据样本:

 
PollID NomineeID Votes 
1  1   108 
1  2   145 
1  3   4 
2  1   10 
2  2   41 
2  3   0 

我会很感激任何建议或帮助任何人都可以给我。

+1

的数据库拉你使用(答案各不相同) – Bohemian

+0

首先,我会'总结(票)',按'NomineeId,PollId'分组。然后在这个结果集上工作,只保留具有最高票数的“代名人”。 –

+0

@Bohemian - 我正在使用SQL Server 2008 – user2860285

回答

3

这将匹配最高,并且还会带回领带。

select sd.* 
from sampleData sd 
    inner join (
     select PollID, max(votes) as MaxVotes 
     from sampleData 
     group by PollID 
    ) x on 
     sd.PollID = x.PollID and 
      sd.Votes = x.MaxVotes 
+0

需要内部连接。我认为RANK()会有更好的表现。也许CTE会更好。 – Pellared

+0

非常感谢! – user2860285

+0

+1不使用sqlserver特定代码。这将在大多数(所有?)数据库风格 – Bohemian

0
SELECT PollID, NomineeID, Votes 
FROM 
table AS ABB2 
    JOIN 
     (SELECT PollID, MAX(Votes) AS most_votes 
     FROM table) AS ABB1 ON ABB1.PollID = ABB2.PollID AND ABB1.most_votes = ABB2.Votes 

请注意,如果你有2名被提名人与相同数量的票数最多的相同调查中,他们都会使用这个查询

2
SELECT 
    t.NomineeID, 
    t.PollID 
FROM 
    (SELECT 
     NomineeID, 
     PollID, 
     RANK() OVER (PARTITION BY i.PollID ORDER BY i.Votes DESC) AS Rank 
    FROM SampleData i) t 
WHERE 
    t.Rank = 1 
+0

+1中适用于使用“RANK”。 –

+0

同一个候选人可以列出多个民意调查。这个查询不会告诉用户哪个人选获胜。 –

+0

你可以修改而不是-1 :)更正 – Pellared

0
select Pollid, Nomineeid, Votes from Poll_table 
where Votes in ( 
    select max(Votes) from Poll_table 
    group by Pollid 
);