2014-05-18 1 views
0

이 데이터베이스를 보유하고 있으며 훌륭한 선택을하고 싶지만 너무 열심히 노력하고 있습니다. 그러나 나는 더 오랫동안 갈 수 없다.SQL Select Outter Join 및 그룹화 및 IFNULL (COUNT) HELP = x

내가 웹 투표 시스템을 만들고 난 greate 각 후보에 대한 매일의 총 투표를 보여 내 그래픽을 COMPLET을 선택할 필요가 있어요

Table -> Candidato | IdCandidato(int) | idNome(varchar) 

Table -> Voto | idVoto(int) | Candidato_idCandidato(int) | DiaVotacao(date) 

데이터베이스.

|VotingDay---------|-----Candidate1----------|-----Candidate2------|--Candidate3 

|2014-05-14-------|---13(total votes)---------|------------4------------|-----------10| 

|2014-05-15-------|---18(total votes)---------|------------0------------|------------8| 

을 지금까지 나는이 가지고 :

|VotingDay---------|-----TOTAL Votes----------|-----Name------| 

|2014-05-14-------|---13(total votes)---------|-Candidate1 

|2014-05-14-------|---18(total votes)---------|-Candidate2 

|2014-05-15-------|---10(total votes)---------|-Candidate1 

|2014-05-15-------|----8(total votes)---------|-Candidate2 

나는 다음과 같은 코드를 사용 :

Candidato = candidate | voto = vote | diaVotacao = voting day (english translation) 

나는이 같은은 응답 필요

SELECT voto.DiaVotacao, IFNULL(COUNT(voto.Candidato_idCandidato),0) as Votos, candidato.Nome FROM candidato LEFT OUTER JOIN voto ON voto.Candidato_idCandidato=candidato.idCandidato GROUP BY voto.DiaVotacao, voto.Candidato_idCandidato

주를이 나는 각 후보자의 투표 수를 원한다. erey 날 그리고 아무 투표도없는 경우 0 투표를 나타 내기 위해 숫자가 U 사람들이 이해 했습니까?

답변

0

후보자와 일 전체 목록을 생성해야하고 을 입력해야합니다.을 입력하면 left outer join이됩니다. votos 테이블에서 요일 목록을 가져올 수 있습니다.

count(<column>)을 사용하면 모든 값이 NULL 인 경우 0이 반환됩니다. 이 ifull() 또는 coalesce() 필요 없다 :

SELECT d.DiaVotacao, COUNT(v.Candidato_idCandidato) as Votos, c.Nome 
FROM candidato c cross join 
    (SELECT DISTINCT v.DiaVotacao FROM voto v 
    ) d LEFT OUTER JOIN 
    voto v 
    ON v.Candidato_idCandidato = c.idCandidato and 
     v.DiaVotacao = d.DiaVotacao 
GROUP BY d.DiaVotacao, v.Candidato_idCandidato; 
+0

내가 그래서 이것은 당신이 큰 wisdow을 보여 매개 변수 모두 익숙 해요,하지만 당신이 v.diavotacao 참조 할 때 나는 오류가 있어요 : 오류 코드 : 1054 알 수없는 열 ' v.DiaVotacao 'in'field list ' 나는 voto.diavotacao로 대체하려고했으나 같은 결과를 얻었습니다. 날짜가 별개가되지 않았을 것입니다. 아마도 별명에서 나온 v 테이블이 그들의 언급 전에 선언되어야합니다. 내가 뭔가 잘못하고있는거야? – Thaffareu