[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