Olá pessoal, bom dia.
Estou tendo um pequeno problema com a linguagem SQL e talvez vocês possam me dar uma luz. ^^
Vamos lá. Eu tenho 3 tabelas distintas em um projeto da faculdade e preciso gerar relatórios gerenciais a partir delas. As tabelas em questão são:
Consultas
CREATE TABLE CONSULTAS (
CON_CODIGO INTEGER NOT NULL,
CON_DATA DATE,
CON_HORA TIME,
PAC_CODIGO INTEGER NOT NULL,
CRM_MEDICO INTEGER NOT NULL,
HIS_CODIGO INTEGER NOT NULL,
CON_ESTADO CHAR(3) CHARACTER SET NONE
);
Médicos
CREATE TABLE MEDICOS (
CRM_MEDICO INTEGER NOT NULL,
MED_NOME VARCHAR(30) CHARACTER SET NONE,
MED_ENDERECO VARCHAR(30) CHARACTER SET NONE,
MED_BAIRRO VARCHAR(15) CHARACTER SET NONE,
MED_CIDADE VARCHAR(15) CHARACTER SET NONE,
MED_ESTADO CHAR(2) CHARACTER SET NONE,
MED_TELEFONE CHAR(10) CHARACTER SET NONE,
MED_CEP CHAR(8) CHARACTER SET NONE,
ESP_CODIGO INTEGER NOT NULL
);
Especialidades
CREATE TABLE ESPECIALIDADES (
ESP_CODIGO INTEGER NOT NULL,
ESP_NOME VARCHAR(50) CHARACTER SET NONE NOT NULL,
ESP_PRECO NUMERIC(10,2) NOT NULL
);
Bom, por algum motivo eu não estou conseguindo realizar qualquer tipo de função de agrupamento (max, avg, etc) quando realizo o join entre as tabelas.
O select que estou executando é:
Código :select med.med_nome, esp.esp_nome, avg(con.con_codigo), count(con.con_codigo) from medicos med, especialidades esp, consultas con where con.crm_medico = med.crm_medico and med.esp_codigo = esp.esp_codigo group by esp.esp_nome
Quando retiro as funções de agrupamento e o group by funciona, mas não exibe as informações que preciso. Estou precisando criar um relatório que exiba pra mim o nome do médico, a especialidade dele, a quantidade média de atendimentos dele e o total de atendimentos entre um período de tempo (ai utilizaria a cláusula between, certo?).
O erro que ele exibe é:
Código :Invalid token. Dynamic SQL Error. SQL error code = -104. Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
Alguém sabe o que pode ser?
Valeu galera.