Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
olá pessoal estava precisando contar o numero de registros de um determinado estado. e tambem o numero de registros de cada estado por mes.....
eu fiz essa query
SELECT m.nome, count( v.codigo ) AS quant, MONTH( v.hora_marcada ) AS mes
FROM intra_pedidos v
INNER JOIN estado m ON v.cod_uf = m.codigo
GROUP BY m.nome
ORDER BY mes
LIMIT 0 , 30
e ela me retorna
nome quant mes
Rio Grande do Sul 5 0
São Paulo 2 4
no caso no mes retornou mes 4... mas se eu tiver no mes 2,3 etc.. sempre me retorna no ultimo mes
>
PRa nao complicar muito você poderia fazer duas querys separadas... uma pra contar os registros e outra pra contar registros por mes... :thumbsup:
Caso nao seja seu interesse explique mas sobre o q você quer realmente... :grin:
por exemplo eu tneho minha tabela 'estado' com codigo, nome (todos estados do brasil),
e na tabela 'intra_pedidos' codigo, hora_pedido(seria uma datetime), e outros campos.
eu quero contar quantos registros eu tenho por estado separando por mes
por ex..
rio grande do sul, janeiro (2 pedidos), fevereiro (4 pedidos) e asim por diante
SELECT m.nome, MONTH( v.hora_marcada ) AS mes, count( v.codigo ) AS quant
FROM intra_pedidos v
INNER JOIN estado m ON v.cod_uf = m.codigo
GROUP BY m.nome,MONTH( v.hora_marcada )
ORDER BY 1,2
LIMIT 0 , 30
>
SELECT m.nome, MONTH( v.hora_marcada ) AS mes, count( v.codigo ) AS quant
FROM intra_pedidos v
INNER JOIN estado m ON v.cod_uf = m.codigo
GROUP BY m.nome,MONTH( v.hora_marcada )
ORDER BY 1,2
LIMIT 0 , 30
vlw mas desse jeito, nao sera possivel pq cada estado eu preciso fazer uma string asim
"['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']" substituindo os zeros pela quantidade naquele mes, alguem pode da uma sugestão de como pode ser feito
CASE
select nome,
sum(case when mes = 1 then quant else 0 end) janeiro,
sum(case when mes = 2 then quant else 0 end) fevereiro,
...
sum(case when mes = 12 then quant else 0 end) dezembro
from
(
SELECT m.nome, MONTH( v.hora_marcada ) AS mes, count( v.codigo ) AS quant
FROM intra_pedidos v
INNER JOIN estado m ON v.cod_uf = m.codigo
GROUP BY m.nome,MONTH( v.hora_marcada )
)
group by nome
ORDER BY 1
Ajudou?
faltando o AS
select m.nome,
sum(case when mes = 1 then quant else 0 end) AS janeiro,
sum(case when mes = 2 then quant else 0 end) AS fevereiro,
sum(case when mes = 12 then quant else 0 end) AS dezembro
from
(SELECT m.nome, MONTH( v.hora_marcada ) AS mes, count( v.codigo ) AS quant
FROM intra_pedidos v
INNER JOIN estado m ON v.cod_uf = m.codigo
GROUP BY m.nome,MONTH( v.hora_marcada ))
ORDER BY 1,2
LIMIT 0 , 30
tentei asim mas fica dando o erro..
#1248 - Every derived table must have its own alias
Every derived table must have its own alias .
Toda tabela derivada deve ter um "alias".
select m.nome,
sum(case when mes = 1 then quant else 0 end) AS janeiro,
sum(case when mes = 2 then quant else 0 end) AS fevereiro,
sum(case when mes = 12 then quant else 0 end) AS dezembro
from
(SELECT m.nome, MONTH( v.hora_marcada ) AS mes, count( v.codigo ) AS quant
FROM intra_pedidos v
INNER JOIN estado m ON v.cod_uf = m.codigo
GROUP BY m.nome,MONTH( v.hora_marcada )) VIRTUAL
ORDER BY 1,2
LIMIT 0 , 30
PS faça o CASE para os outros meses ....
>
Every derived table must have its own alias .
Toda tabela derivada deve ter um "alias".
select m.nome,
sum(case when mes = 1 then quant else 0 end) AS janeiro,
sum(case when mes = 2 then quant else 0 end) AS fevereiro,
sum(case when mes = 12 then quant else 0 end) AS dezembro
from
(SELECT m.nome, MONTH( v.hora_marcada ) AS mes, count( v.codigo ) AS quant
FROM intra_pedidos v
INNER JOIN estado m ON v.cod_uf = m.codigo
GROUP BY m.nome,MONTH( v.hora_marcada )) VIRTUAL
ORDER BY 1,2
LIMIT 0 , 30
PS faça o CASE para os outros meses ....
vlww funcionando ;D
PRa nao complicar muito você poderia fazer duas querys separadas... uma pra contar os registros e outra pra contar registros por mes... :thumbsup:
Caso nao seja seu interesse explique mas sobre o q você quer realmente... :grin: