[firebase-br] RES: COUNT

Ivan Guimarães Meirelles igmeirelles em gmail.com
Ter Jul 28 23:04:22 -03 2009


Opa... corrigindo.. tire a virgula antes de cada FROM depois da palavra
MEDIO... foi por engano...

Um abraço.

-----Mensagem original-----
De: Ivan Guimarães Meirelles [mailto:igmeirelles em gmail.com] 
Enviada em: terça-feira, 28 de julho de 2009 22:01
Para: 'FireBase'
Assunto: RES: [firebase-br] COUNT

Olá Jose...

Eu faria uma SP para isso... a complexidade está em transformar colunas em
linhas para fazer o q vc quer...
Mas aqui vai uma idéia um pouco tosca... mas acho q resolveria sem usar uma
SP... faça um teste...

select id_curso, id_periodo, 'R1',
sum(case r1 when 'R' then 1 else 0 end) ruim,
sum(case r1 when 'B' then 1 else 0 end) bom,
sum(case r1 when 'M' then 1 else 0 end) medio,
from tabela_gabarito group by 1, 2

union

select id_curso, id_periodo, 'R2',
sum(case r2 when 'R' then 1 else 0 end) ruim,
sum(case r2 when 'B' then 1 else 0 end) bom,
sum(case r2 when 'M' then 1 else 0 end) medio,
from tabela_gabarito group by 1, 2

union

select id_curso, id_periodo, 'R3',
sum(case r3 when 'R' then 1 else 0 end) ruim,
sum(case r3 when 'B' then 1 else 0 end) bom,
sum(case r3 when 'M' then 1 else 0 end) medio,
from tabela_gabarito group by 1, 2

union

select id_curso, id_periodo, 'R4',
sum(case r4 when 'R' then 1 else 0 end) ruim,
sum(case r4 when 'B' then 1 else 0 end) bom,
sum(case r4 when 'M' then 1 else 0 end) medio,
from tabela_gabarito group by 1, 2


Espero q ajude...
Um abraço.

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Jose Luiz de Medeiros
Enviada em: terça-feira, 28 de julho de 2009 21:40
Para: lista em firebase. com. br
Assunto: [firebase-br] COUNT

Colegas, tenho um cadastro onde os alunos votaram sobre alguns cursos
ministrados, preciso então de imprimir o resultado.

 

Tabela de gabarito tenho:

 

ID_CURSO

ID_PERIODO

R1

R2

R3

R4

 

Os campos R1,R2,R3,R4 são os campos tipo char(1) que o aluno responde sobre
determinada pergunta: R(ruim)B(bom)M(médio).

Preciso num SQL agrupar essas resposta me dando o somatório de cada
resposta.

Tipo assim:

 

CURSO 1   PERIODO 5     BOM       MEDIO     RUIM

PERGUNTA1(R1)              100           30               40    

 PERGUNTA2(R2)             30             50                48

 PERGUNTA3(R3)             32             50                29


PERGUNTA4(R4)              49             10                28


 

Nesse exemplo funciona:

SELECT G.ID_CURSO,G.ID_PERIODO,COUNT(R1)as BOM

FROM gabarito G

WHERE

G.R1 = 'B'

GROUP by

G.ID_CURSO,G.ID_PERIODO

 

Funciona beleza

 

Mas como são muitas respostas diferentes nesse outro exemplo o resultado não
bate.

 

SELECT G.ID_CURSO,G.ID_PERIODO,

(SELECT COUNT(R1)FROM GABARITO WHERE R1 = 'B')AS BOM,

(SELECT COUNT(R1)FROM GABARITO WHERE R1 = 'R')AS RUIM,

(SELECT COUNT(R1)FROM GABARITO WHERE R1 = 'M')AS MEDIO,

(SELECT COUNT(R2)FROM GABARITO WHERE R2 = 'B')AS BOM,

(SELECT COUNT(R2)FROM GABARITO WHERE R2 = 'R')AS RUIM,

(SELECT COUNT(R2)FROM GABARITO WHERE R2 = 'M')AS MEDIO

FROM GABARITO G

GROUP by

G.ID_CURSO,G.ID_PERIODO 

 

Além de repetir o valor,a conta não bate.

 

O que estou fazendo de errado?

 

Grato:

Jose Luiz

 

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista