2014-11-06 2 views
-2

아무 것도 설정하지 않았지만 매우 간단한 대답이라고 확신합니다. 나는 틀린 질문을 표현하고 있다고 확신하기 때문에 가장.SQL : 열의 최대 값을 갖는 행 수

어쨌든, 나는이 아주 간단한 테이블이 있다고 할 수 있습니다 :

테이블 : election_candidates 나는 두 후보가 연결되어있는 경우 알 필요가

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

. 따라서 선거에 대해 가장 많은 표를 얻은 후보가 한 명 이상있는 경우

나는 MAX 함수를 사용하여 선거에서 가장 큰 가치를 얻을 수 있다고 알고 있지만, 주어진 선거에 대해 최대 후보자가 몇 명인지를 쉽게 얻을 수있는 쿼리입니까?

PHP와 Codeigniter 프레임 워크를 사용하고 있습니다 만, 일반적으로 작동 할 수있는 쿼리의 일반적인 예는 괜찮습니다.

답변

0

그냥 승자 :

SELECT * 
from election_candidates 
ORDER BY votes DESC 
LIMIT 0,1 
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; 
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 

를이 최대의 투표 (선거 당) 당신에게 candiates을 얻어야한다.

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) 
관련 문제