Listar com excessões os dados de uma tabela

7 respostas
cscalea

Oi, boa tarde pessoal.
Em um banco de dados, tenho duas tabelas, ‘Projetos’ com 20 projetos inseridos, e a tabela ‘Avaliador’ com 5 avaliadores inseridos. A tabela projetos tem como fk o cpf do Avaliador, pra indicar quais e quantos projetos cada avaliador avaliou… Eu preciso listar qual foi o avaliador que mais avaliou projetos, porém, tem 5 projetos que ainda não foram avaliados, e quando eu peço pra listar o avaliador que mais avaliou projetos, aparece o cpf ‘[CPF removido]’ (cpf que coloquei para os projetos não avaliador). podem me ajudar? esse cpf é o que mais se repete na tabela, porém, não é válido… desde já agradeço.
As tabelas:

insert into Avaliador (cpf, grauAcademico, rg, nome, dataNasc, sexo, fk_codInstituicao)Values
('[CPF removido]', 'Mestre', '51.256.732-1', 'Astéfalo Santos', '1980-09-21', 'M', 1),
('[CPF removido]', 'Mestre', '12.225.731-2', 'Antonella De Cabritt', '1979-07-27', 'F', 2),
('[CPF removido]', 'Doutor', '15.221.639-9', 'Romero Brito', '1969-01-07', 'M', 3),
('[CPF removido]', 'Doutor', '12.631.122-9', 'Karla Rox', '1967-10-20', 'F', 1),
('[CPF removido]', 'Doutor', '16.639.201-5', 'Sharlott Saluh', '1970-03-21', 'F', 2)
;


insert into Projetos (codigo_interno, titulo, orcamento, dt_envio, dt_recebe, resposta, fk_cpf_avli, fk_codInstituicaoa, fk_cpf_pesqu, fk_codGacc, fk_cod)values
(1, 'NOVA FÓRMULA PERFEITA PARA CALCULO DA AREA DO CORPO HUMANO', 'R$20000', '2018-06-10', '2019-06-10',  'APROVADO', '[CPF removido]', 2, '[CPF removido]', 1, 1), -- ok
(2, 'ENERGIA LIMPA COM IMÃS', 'R$300', '2018-02-02', '2018-09-11',  'APROVADO', '[CPF removido]', 1 ,'[CPF removido]', 1, 2), -- ok
(3, 'CELULAR DE GRAFENO', 'R$150000', '2018-11-29', '2020-11-29', 'APROVADO', '[CPF removido]', 1, '[CPF removido]', 1, 3), -- ok 
(4, 'ROBÔ QUE CURA PACIENTES', 'R$19000', '2018-07-27', '2019-05-27',  'APROVADO', '[CPF removido]', 2, '[CPF removido]', 2, 4), -- ok
(5, 'IMPLANTAR 3A GERAÇÃO DE DENTES', 'R$40000', '2018-01-01', '2024-01-01',  'APROVADO', '[CPF removido]', 3, '[CPF removido]', 2, 5), -- ok	
(6, 'PESQUISA - CURA DA AIDS', 'R$16000', '2018-05-20', '2019-05-20',  'APROVADO', '[CPF removido]', 1, '[CPF removido]', 2, 6), -- ok
(7, 'PRODUÇÃO DE BIOINSETICIDA', 'R$51000', '2013-07-27', '2023-05-11',  'APROVADO', '[CPF removido]', 2, '[CPF removido]', 3, 7), -- ok
(8, 'RESULTADO DA CRUZAÇÃO DE ESPÉCIES DIFERENTES', 'R$11000', '2019-02-26', '2020-08-10', 'APROVADO', '[CPF removido]', 1, '[CPF removido]', 3, 8), -- ok
(9, 'BIOLOGIA E TAXONOMIA DE TRIATOMINEOS, VETORES DA DOENÇA DE CHAGAS', 'R$12000', '2010-10-29', '2020-10-29', 'APROVADO', '[CPF removido]', 1, '[CPF removido]', 3, 9), -- ok
(10, 'MÁQUINA QUE CUSTURA PONTOS EM CÃES', 'R$2900', '2018-02-02', '2018-12-02',  'APROVADO', '[CPF removido]', 1 ,'[CPF removido]', 4, 10), -- ok
(11, 'PLANTAS NANOBIONICAS E ILUMINAÇÃO NATURAL', 'R$7000', '2019-01-01', '2021-01-01',  'REPROVADO', '[CPF removido]', 2, '[CPF removido]', 4, 11), -- ok
(12, 'ACELERAÇÃO DE PLANTAÇÕES', 'R$7900', '2018-02-02', '2018-10-10',  'REPROVADO', '[CPF removido]', 3, '[CPF removido]', 4, 12), -- ok
(13, 'PRODUTO QUE DISSOLVE QUALQUER COISA', 'R$12002', '2019-01-20', '2029-01-20', 'REPROVADO', '[CPF removido]', 3, '[CPF removido]', 5, 13), -- ok
(14, 'TIJOLOS INTELIGENTES', 'R$15000', '2018-11-16', '2020-12-16',  'REPROVADO', '[CPF removido]', 3, '[CPF removido]', 5, 14), -- ok
(15, 'PRODUTO QUÍMICO DESTACA MINÉRIOS ATÉ 5 CAMADAS', 'R$30000', '2019-05-06', '2021-05-06',  'REPROVADO', '[CPF removido]', 2, '[CPF removido]', 5, 15), -- ok
(16, 'DISCIPLINA ADMINISTRAÇÃO NAS ESCOLAS', 'R$30000', '2020-01-01', '2022-10-10','NÃO AVALIADO', '[CPF removido]', 2, '[CPF removido]', 6, 16), -- ok
(17, 'ESTUDO DE MICRO EXPRESSÕES NO JULGAMENTO', 'R$3500', '2018-01-25', '2019-04-25',  'NÃO AVALIADO', '[CPF removido]', 3, '[CPF removido]', 6, 17), -- ok
(18, 'A FORMA QUE O DINHEIRO ESTÁ GIRANDO O MUNDO', 'R$6606', '2018-12-25', '2019-12-15',  'NÃO AVALIADO', '[CPF removido]',  2, '[CPF removido]', 6, 18), -- ok
(19, 'ANTROPOLOGIA - OBJETOS E COMPORTAMENTOS', 'R$4000', '2019-01-01', '2021-01-01',  'NÃO AVALIADO', '[CPF removido]', 2, '[CPF removido]', 7, 19), -- ok
(20, 'TEORIA DA PROJETABILIDADE DE FUNDO', 'R$900', '2018-03-10', '2018-10-10',  'NÃO AVALIADO', '[CPF removido]', 1, '[CPF removido]', 7, 20) -- ok
;

o select:

select count(DISTINCT Avaliador.nome) as QuantidadeDeProjetosAvaliados, Avaliador.nome
from Avaliador
inner join Projetos
on Avaliador.cpf = Projetos.fk_cpf_avli
where fk_cpf_avli > 0;

esse select está me resultando número de projetos avaliados = 5 e o nome do avaliador : Sharlot, mas está errado.;;

7 Respostas

TerraSkilll

Faltou você colocar o select que está fazendo para essa consulta.

Você realmente precisa preencher os projetos não avaliados com o CPF ‘[CPF removido]’? Se não, deixe-os como nulos e adicione uma condição not null na sua consulta. Se essa informação é obrigatória, adicione uma verificação pra ignorar esse cpf.

Abraço.

cscalea

Antes não estava preenchido com os zeros, porém, por conta disso comecei a ter problemas pois é uma fk que estava vazia na tabela projetos

cscalea

Column count doesn’t match value count at row 16

recebo esse erro quando os campos de cpf nos projetos não avaliados ficam vazios

TerraSkilll

Você ainda não colocou o sql da consulta que está fazendo, onde quer que não traga os registros que não foram avaliados.

Isso quando você faz o insert, certo? Você precisa passar null para as colunas que devem ficar vazias. Se você tentar passar um valor, vai ter problemas com a FK.

Abraço.

cscalea

coloquei ali no código no tópico, da uma olhada no final

TerraSkilll

Como você está preenchendo o cpf de registros sem avaliaçao com [CPF removido], basta adicionar uma condição para não pegar esses registros. Algo mais ou menos assim:

select count(DISTINCT Avaliador.nome) as QuantidadeDeProjetosAvaliados, 
  Avaliador.nome
from Avaliador
inner join Projetos
on Avaliador.cpf = Projetos.fk_cpf_avli
where fk_cpf_avli <> '[CPF removido]';

Por que está errado? Qual resultado você esperava? É mais fácil você dizer qual resultado espera do que a gente ter que ficar procurando o que pode estar errado no seu código.

Se você precisa somente do avaliador que avaliou mais projetos (ou seja, apenas 1 registro), precisa usar limit. Ficaria algo assim:

select count(*) as QuantidadeDeProjetosAvaliados, Avaliador.nome
from Avaliador
inner join Projetos
on Avaliador.cpf = Projetos.fk_cpf_avli
where fk_cpf_avli <> '[CPF removido]'
  group by Avaliador.nome
  order by count(*)
  limit 1;

Obs: a sintaxe pode precisar de ajuste.

Abraço.

cscalea

Peço desculpas comecei a estudar mysql recentemente, eu não conhecia esse ‘limit’ mas já sei que isso é preciso para o que eu quero fazer, justamente, listar somente 1 registro, o do avaliador que avaliou mais projetos…

Criado 22 de novembro de 2018
Ultima resposta 23 de nov. de 2018
Respostas 7
Participantes 2