Fórum Estatística por filial e níveis #461090

14/11/2013

0

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??
Andre Teixeira

Andre Teixeira

Responder

Posts

18/11/2013

Felippe Tadeu

Bom dia, poste a estrutura das tabelas.
Responder

Gostei + 0

18/11/2013

Felippe Tadeu

Bom dia, poste a estrutura das tabelas.
Responder

Gostei + 0

18/11/2013

Alex Lekao

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
Responder

Gostei + 0

18/11/2013

Andre Teixeira

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


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.
Responder

Gostei + 0

18/11/2013

Alex Lekao

Oi Andre, boa tarde!!!

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
Responder

Gostei + 0

14/01/2014

Andre Teixeira

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.
Responder

Gostei + 0

14/01/2014

William

Dúvida resolvida, estou encerrando o tópico !!!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar