2013-10-08 66 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 
);