Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Deizi Buganti

Fazer uma query com dois count em tabelas diferentes e depois somá-los

Recommended Posts

E ae pessoal, sou nova no fórum e preciso muito de ajuda, estou a dias quebrando a cabeça e pesquisando muito e não consegui fazer um query que preciso para um trabalho da faculdade, espero que alguém possa me ajudar. A questão é a seguinte:

 

Tenho um banco de dados(Gerenciador de Bibliotecas) com as seguintes tabelas:

Usuário(codusuario, nomusuario)

Empréstimo(codemprestimo, dataemprestimo, codexemplar, codusuario)

Reserva(codreserva, datareserva, codexemplar, codusuario)

Exemplar(codexemplar, codmaterial)

Material(codmaterial, codtipomaterial) – No codtipomaterial o número 1 é o código de Livro que é o que preciso.

 

A query que preciso fazer pede o seguinte: Apresentar o nome do usuário, quantidade de livros emprestados, quantidade de livros reservados, somente empréstimos e reservas do ano de 2015 e apresentar uma coluna com a soma dos empréstimos e as reservas(total de empréstimos + total de reservas) de cada usuário. Ordenar o relatório pela soma de forma descendente.

 

Alguém poderia me auxiliar ? eu tentei de diversas maneiras mas sempre encontro um problema, não consigo apresentar o nome do usuário só o código ou então o número de empréstimos e reserva ficam iguais para todos os usuários, ou ainda não seleciona o tipo de material 1 como preciso e a parte da soma do total que utilizaria o SUM para somar os dois COUNT eu nem consegui começar. Sou iniciante então peço por gentileza terem paciência se caso falei algo errado.

 

Agradeço desde já a compreensão e ajuda.

 

Atenciosamente,

Deizi Buganti

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que conseguiu ?

Pesquise por GROUP BY

Pesquise o use do CASE, pode ser úti.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Até o momento tenho isso:

 

select codusuario, (select count(emprestimo.codemprestimo) 
                    from emprestimo 
                    where emprestimo.codusuario = usuario.codusuario 
                    and emprestimo.codexemplar in (select codexemplar 
                                                   from exemplar 
                                                   where exemplar.codmaterial in (select codmaterial 
                                                                                  from material
                                                                                  where material.codtipomaterial = 1))) as "Empréstimos", 
                   (select count(reserva.codreserva) 
                    from reserva 
                    where reserva.codusuario = usuario.codusuario 
                    and reserva.codexemplar in (select codexe 
                                                from exemplar 
                                                where exemplar.codmaterial in (select codmaterial 
                                                                               from material 
                                                                               where material.codtipomaterial = 1))) as "Reservas"
from usuario
group by (codusuario);
não consegui mostra o nomusu e nem somar os dois count ...

Compartilhar este post


Link para o post
Compartilhar em outros sites
não consegui mostra o nomusu e nem somar os dois count ...

 

 

Sem entrar no mérito do desempenho de sua sql

SELECT CODUSUARIO , NOMUSUARIO , EMPRESTIMOS + Reservas
FROM
(
select codusuario, NOMUSUARIO ,
                   (select count(emprestimo.codemprestimo)
                    from emprestimo
                    where emprestimo.codusuario = usuario.codusuario
                    and emprestimo.codexemplar in (select codexemplar
                                                   from exemplar
                                                   where exemplar.codmaterial in (select codmaterial
                                                                                  from material
                                                                                  where material.codtipomaterial = 1))) as EmprEstimos ,
                   (select count(reserva.codreserva)
                    from reserva
                    where reserva.codusuario = usuario.codusuario
                    and reserva.codexemplar in (select codexe
                                                from exemplar
                                                where exemplar.codmaterial in (select codmaterial
                                                                               from material
                                                                               where material.codtipomaterial = 1))) as  Reservas
from usuario
group by (codusuario)
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

select codusu, nomusu, (Emprestimos + Reservas) as Total from
(
select codusu, nomusu,
(select count(emprestimo.codemp)
from emprestimo
where emprestimo.codusu = usuario.codusu
and emprestimo.codexe in (select codexe
from exemplar
where exemplar.codmat in (select codmat
from material
where material.codtipmat = 1))) as Emprestimos,
(select count(reserva.codres)
from reserva
where reserva.codusu = usuario.codusu
and reserva.codexe in (select codexe
from exemplar
where exemplar.codmat in (select codmat
from material
where material.codtipmat = 1))) as Reservas
from usuario
group by (codusu)

) as Pesquisa;

Agora tenho isso, está rodando e retornando a soma dos dois count certo, bem como eu queria, obrigada :) Só tenho mais uma dúvida, eu preciso mostrar os count, tem que aparecer no resultado da minha consulta:
CÓDIGO DE USUÁRIO | NOME USUÁRIO | QTD EMPRÉSTIMOS | QTD RESERVAS | SOMA(QTD EMP + QTD RES)

Como faço isso? Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Sr. Motta,

 

Já resolvi o problema, só precisava mostrar o Empréstimo e a Reserva na consulta,

Agora está tudo certo. Obrigada pela ajuda e atenção.

 

Atenciosamente,

Deizi

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.