GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Listar com excessões os dados de uma tabela


#1

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 ‘000.000.000-00’ (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
('125.552.256-21', 'Mestre', '51.256.732-1', 'Astéfalo Santos', '1980-09-21', 'M', 1),
('124.567.753-12', 'Mestre', '12.225.731-2', 'Antonella De Cabritt', '1979-07-27', 'F', 2),
('124.422.245-12', 'Doutor', '15.221.639-9', 'Romero Brito', '1969-01-07', 'M', 3),
('234.466.214-12', 'Doutor', '12.631.122-9', 'Karla Rox', '1967-10-20', 'F', 1),
('123.366.664-21', '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', '125.552.256-21', 2, '653.323.764-21', 1, 1), -- ok
(2, 'ENERGIA LIMPA COM IMÃS', 'R$300', '2018-02-02', '2018-09-11',  'APROVADO', '124.567.753-12', 1 ,'653.323.764-21', 1, 2), -- ok
(3, 'CELULAR DE GRAFENO', 'R$150000', '2018-11-29', '2020-11-29', 'APROVADO', '125.552.256-21', 1, '857.387.291-29', 1, 3), -- ok 
(4, 'ROBÔ QUE CURA PACIENTES', 'R$19000', '2018-07-27', '2019-05-27',  'APROVADO', '124.567.753-12', 2, '857.387.291-29', 2, 4), -- ok
(5, 'IMPLANTAR 3A GERAÇÃO DE DENTES', 'R$40000', '2018-01-01', '2024-01-01',  'APROVADO', '125.552.256-21', 3, '126.632.284-92', 2, 5), -- ok	
(6, 'PESQUISA - CURA DA AIDS', 'R$16000', '2018-05-20', '2019-05-20',  'APROVADO', '125.552.256-21', 1, '126.632.284-92', 2, 6), -- ok
(7, 'PRODUÇÃO DE BIOINSETICIDA', 'R$51000', '2013-07-27', '2023-05-11',  'APROVADO', '124.422.245-12', 2, '124.673.368-84', 3, 7), -- ok
(8, 'RESULTADO DA CRUZAÇÃO DE ESPÉCIES DIFERENTES', 'R$11000', '2019-02-26', '2020-08-10', 'APROVADO', '234.466.214-12', 1, '124.673.368-84', 3, 8), -- ok
(9, 'BIOLOGIA E TAXONOMIA DE TRIATOMINEOS, VETORES DA DOENÇA DE CHAGAS', 'R$12000', '2010-10-29', '2020-10-29', 'APROVADO', '125.552.256-21', 1, '521.567.782-24', 3, 9), -- ok
(10, 'MÁQUINA QUE CUSTURA PONTOS EM CÃES', 'R$2900', '2018-02-02', '2018-12-02',  'APROVADO', '234.466.214-12', 1 ,'521.567.782-24', 4, 10), -- ok
(11, 'PLANTAS NANOBIONICAS E ILUMINAÇÃO NATURAL', 'R$7000', '2019-01-01', '2021-01-01',  'REPROVADO', '124.422.245-12', 2, '958.864.418-99', 4, 11), -- ok
(12, 'ACELERAÇÃO DE PLANTAÇÕES', 'R$7900', '2018-02-02', '2018-10-10',  'REPROVADO', '124.422.245-12', 3, '958.864.418-99', 4, 12), -- ok
(13, 'PRODUTO QUE DISSOLVE QUALQUER COISA', 'R$12002', '2019-01-20', '2029-01-20', 'REPROVADO', '123.366.664-21', 3, '212.552.721-23', 5, 13), -- ok
(14, 'TIJOLOS INTELIGENTES', 'R$15000', '2018-11-16', '2020-12-16',  'REPROVADO', '124.422.245-12', 3, '212.552.721-23', 5, 14), -- ok
(15, 'PRODUTO QUÍMICO DESTACA MINÉRIOS ATÉ 5 CAMADAS', 'R$30000', '2019-05-06', '2021-05-06',  'REPROVADO', '123.366.664-21', 2, '244.512.215-88', 5, 15), -- ok
(16, 'DISCIPLINA ADMINISTRAÇÃO NAS ESCOLAS', 'R$30000', '2020-01-01', '2022-10-10','NÃO AVALIADO', '000.000.000-00', 2, '244.512.215-88', 6, 16), -- ok
(17, 'ESTUDO DE MICRO EXPRESSÕES NO JULGAMENTO', 'R$3500', '2018-01-25', '2019-04-25',  'NÃO AVALIADO', '000.000.000-00', 3, '235.531.774-62', 6, 17), -- ok
(18, 'A FORMA QUE O DINHEIRO ESTÁ GIRANDO O MUNDO', 'R$6606', '2018-12-25', '2019-12-15',  'NÃO AVALIADO', '000.000.000-00',  2, '235.531.774-62', 6, 18), -- ok
(19, 'ANTROPOLOGIA - OBJETOS E COMPORTAMENTOS', 'R$4000', '2019-01-01', '2021-01-01',  'NÃO AVALIADO', '000.000.000-00', 2, '633.521.832-82', 7, 19), -- ok
(20, 'TEORIA DA PROJETABILIDADE DE FUNDO', 'R$900', '2018-03-10', '2018-10-10',  'NÃO AVALIADO', '000.000.000-00', 1, '633.521.832-82', 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.;;


#2

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

Você realmente precisa preencher os projetos não avaliados com o CPF ‘000.000.000-00’? 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.


#3

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


#4

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


#5

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.


#6

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


#7

Como você está preenchendo o cpf de registros sem avaliaçao com 000.000.000-00, 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 <> '000.000.000-00';

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 <> '000.000.000-00'
  group by Avaliador.nome
  order by count(*)
  limit 1;

Obs: a sintaxe pode precisar de ajuste.

Abraço.


#8

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…