Pessoal,
Estou necessitando de ajuda na utilização da função COUNT do SQL para calcular totais parciais em uma consulta.
Eu trabalho com um sistema de controle acadêmico de pós-graduação de uma instituição de ensino superior.
O banco de dados que usamos é o PostgreSQL 8.3
Estão envolvidas as seguintes tabelas
Tabela de PROGRAMAS
Table: programas
CREATE TABLE programas
(
prg_cod_programa numeric(3) NOT NULL,
prg_descricao character varying(60) NOT NULL,
CONSTRAINT programa_pk PRIMARY KEY (prg_cod_programa)
)
WITH (OIDS=FALSE);
ALTER TABLE programas OWNER TO role_posgrad;
Tabela de NIVEIS
-- Table: niveis
CREATE TABLE niveis
(
niv_prg_cod_programa numeric(3) NOT NULL,
niv_tipo numeric(1) NOT NULL,
niv_turno numeric(1) NOT NULL,
CONSTRAINT niveis_pk PRIMARY KEY (niv_prg_cod_programa, niv_tipo),
CONSTRAINT fk_niveis_programas FOREIGN KEY (niv_prg_cod_programa)
REFERENCES programas (prg_cod_programa) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT
)
WITH (OIDS=FALSE);
ALTER TABLE niveis OWNER TO role_posgrad;
Tabela de ALUNOS
-- Table: alunos
CREATE TABLE alunos
(
alu_matricula character varying(9) NOT NULL,
alu_ecu_niv_prg_cod_programa numeric(3) NOT NULL,
alu_ecu_niv_tipo numeric(1) NOT NULL,
alu_ecu_curriculo numeric(5),
alu_arc_cod_area numeric(2),
alu_campus numeric(1) NOT NULL,
alu_situacao character(1) NOT NULL,
alu_regime_dedicacao character(1),
CONSTRAINT aluno_pk PRIMARY KEY (alu_matricula)
)
WITH (OIDS=FALSE);
ALTER TABLE alunos OWNER TO role_posgrad;
A consulta solicitada é :
Obtenha a quantidade de alunos matriculados em cada CAMPUS(alu_campus), agrupados
por PROGRAMA(alu_ecu_niv_prg_cod_programa), NIVEL(alu_ecu_niv_tipo) e TURNO(niv_turno).
Criei um esboço de query para resolver o problema acima, mas, infelizmente não está funcionando.
O código deste “esboço” é o seguinte
select p.prg_cod_programa, p.prg_descricao, a.alu_ecu_niv_tipo, n.niv_turno, count (a.alu_matricula)
from alunos a, niveis n, programas p
where a.alu_situacao = 'A'
and a.alu_ecu_niv_prg_cod_programa = n.niv_prg_cod_programa
and a.alu_ecu_niv_tipo = n.niv_tipo
group by p.prg_cod_programa, p.prg_descricao, a.alu_ecu_niv_tipo, n.niv_turno, a.alu_matricula
order by p.prg_cod_programa, a.alu_ecu_niv_tipo, n.niv_turno,a.alu_matricula
O count “acima” não está funcionando.
Eu necessito que o total parcial de alunos seja agrupado por PROGRAMA, NIVEL E TURNO.
Como devo utilizar a função COUNT para obter o resultado esperado ?
Terei que OBRIGATORIAMENTE usar o recurso de SUBCONSULTAS ?
Será que alguém poderia me ajudar ?
Agradece,
Max Carvalho