Estatística por filial e níveis
Olá.
Eu estou fazendo uma pesquisa no bd, e selecionei exemplares que foram emprestados durante um certo período, filtrando por Filial e Níveis.
Os níveis ficam na tabela I
Os empréstimos na tabela P
E as informações do livro ficam na tabela N ( onde também tenho o id dos níveis)
Utilizei a seguinte query:
SELECT (SELECT COUNT(n.id_I =1)) AS 'A1', (SELECT COUNT(n.id_I =2)) AS 'A2', (SELECT COUNT(n.id_I=4)) AS 'B1', (SELECT COUNT(n.id_I =5)) AS 'B2'
FROM P p
INNER JOIN N n ON n.id = p.id
WHERE YEAR( p.datetime ) = '2013'
AND MONTH( p.datetime ) = '10'
AND p.local = 2
Pelo pouco que entendo o resultado deveria ser a contagem de empréstimos em cada nível, no período e na filial determinada.
Mas o resultado são valores iguais em cada nível.
Alguém pode me esclarecer porque isso acontece??
Eu estou fazendo uma pesquisa no bd, e selecionei exemplares que foram emprestados durante um certo período, filtrando por Filial e Níveis.
Os níveis ficam na tabela I
Os empréstimos na tabela P
E as informações do livro ficam na tabela N ( onde também tenho o id dos níveis)
Utilizei a seguinte query:
SELECT (SELECT COUNT(n.id_I =1)) AS 'A1', (SELECT COUNT(n.id_I =2)) AS 'A2', (SELECT COUNT(n.id_I=4)) AS 'B1', (SELECT COUNT(n.id_I =5)) AS 'B2'
FROM P p
INNER JOIN N n ON n.id = p.id
WHERE YEAR( p.datetime ) = '2013'
AND MONTH( p.datetime ) = '10'
AND p.local = 2
Pelo pouco que entendo o resultado deveria ser a contagem de empréstimos em cada nível, no período e na filial determinada.
Mas o resultado são valores iguais em cada nível.
Alguém pode me esclarecer porque isso acontece??
Andre Teixeira
Curtidas 0
Respostas
Felippe Tadeu
14/11/2013
Bom dia, poste a estrutura das tabelas.
GOSTEI 0
Felippe Tadeu
14/11/2013
Bom dia, poste a estrutura das tabelas.
GOSTEI 0
Alex Lekao
14/11/2013
Ola Bom dia!!!
Acredito que com a estrutura das tabelas ajudara nas analises.
So nao entendi pq um select count para cada tipo, so colocando o count nao resolveria?
abraco.
Alex - Lekao
Acredito que com a estrutura das tabelas ajudara nas analises.
So nao entendi pq um select count para cada tipo, so colocando o count nao resolveria?
abraco.
Alex - Lekao
GOSTEI 0
Andre Teixeira
14/11/2013
Ola Bom dia!!!
Acredito que com a estrutura das tabelas ajudara nas analises.
So nao entendi pq um select count para cada tipo, so colocando o count nao resolveria?
abraco.
Alex - Lekao
Acredito que com a estrutura das tabelas ajudara nas analises.
So nao entendi pq um select count para cada tipo, so colocando o count nao resolveria?
abraco.
Alex - Lekao
Bom pessoal, eu também ñ disponho da estrutura das tabelas.
Alex, eu fiz dessa forma porque apenas com um count ñ teria o total de empréstimos por diferentes níveis.
Além do mais, o mysql apresentou mensagem de erro com mais de um count para apenas um select.
GOSTEI 0
Alex Lekao
14/11/2013
Oi Andre, boa tarde!!!
O que quiz dizer com relacao ao count foi o seguinte:
o codigo desta forma nao resolveria?
no lugar de usar da forma que usou.
Experimente talves colocar um distrinct para ver se funciona.
Nao sei se no mysql permite desta forma, talvez usando o distrinct ajude, ou usando um para cada count ou um unico distinct para todos.
Talvez possa melhor se vc colocar um group by.
Espero ter ajudado.
Abraco.
Alex - Lekao
O que quiz dizer com relacao ao count foi o seguinte:
o codigo desta forma nao resolveria?
SELECT COUNT(n.id_I =1) AS 'A1', COUNT(n.id_I =2) AS 'A2', COUNT(n.id_I =4) AS 'B1', COUNT(n.id_I =5) AS 'B2' FROM P p INNER JOIN N n ON n.id = p.id WHERE YEAR( p.datetime ) = '2013' AND MONTH( p.datetime ) = '10' AND p.local = 2
no lugar de usar da forma que usou.
SELECT (SELECT COUNT(n.id_I =1)) AS 'A1', (SELECT COUNT(n.id_I =2)) AS 'A2', (SELECT COUNT(n.id_I=4)) AS 'B1', (SELECT COUNT(n.id_I =5)) AS 'B2' FROM P p INNER JOIN N n ON n.id = p.id WHERE YEAR( p.datetime ) = '2013' AND MONTH( p.datetime ) = '10' AND p.local = 2
Experimente talves colocar um distrinct para ver se funciona.
SELECT distrinct COUNT(n.id_I =1) AS 'A1', distrinct COUNT(n.id_I =2) AS 'A2', distrinct COUNT(n.id_I =4) AS 'B1', distrinct COUNT(n.id_I =5) AS 'B2' FROM P p INNER JOIN N n ON n.id = p.id WHERE YEAR( p.datetime ) = '2013' AND MONTH( p.datetime ) = '10' AND p.local = 2
Nao sei se no mysql permite desta forma, talvez usando o distrinct ajude, ou usando um para cada count ou um unico distinct para todos.
Talvez possa melhor se vc colocar um group by.
Espero ter ajudado.
Abraco.
Alex - Lekao
GOSTEI 0
Andre Teixeira
14/11/2013
Obrigado Alex e aos que tentaram me ajudar.
Eu resolvi o problema com algo +ou- parecido com isso.
SELECT ColoqueOCampoComNmeDaFilialAqui, SUM(IF(n.id_I=1,1,0)) AS 'A1', SUM(IF(n.id_I=2,1,0)) AS 'A2', SUM(IF(n.id_I=4,1,0)) AS 'B1', SUM(IF(n.id_I =5,1,5)) AS 'B2'
FROM P p
INNER JOIN N n ON n.id = p.id
WHERE (p.datetime BETWEEN '2013-10-01' AND '2013-10-31') AND p.local = 2
GROUP BY ColoqueOCampoComNmeDaFilialAqui
Exibiu os resultados desejados.
Eu resolvi o problema com algo +ou- parecido com isso.
SELECT ColoqueOCampoComNmeDaFilialAqui, SUM(IF(n.id_I=1,1,0)) AS 'A1', SUM(IF(n.id_I=2,1,0)) AS 'A2', SUM(IF(n.id_I=4,1,0)) AS 'B1', SUM(IF(n.id_I =5,1,5)) AS 'B2'
FROM P p
INNER JOIN N n ON n.id = p.id
WHERE (p.datetime BETWEEN '2013-10-01' AND '2013-10-31') AND p.local = 2
GROUP BY ColoqueOCampoComNmeDaFilialAqui
Exibiu os resultados desejados.
GOSTEI 0
William
14/11/2013
Dúvida resolvida, estou encerrando o tópico !!!
GOSTEI 0