mysql select aninhado
Boa tarde pessoal. Gostaria de saber se alguém poderia me ajudar com um problema. Fiz um select em um banco de dados mysql para obter valores de sobras de empresas por trimestre no ano de 2014 (as sobras são calculadas em função de faturamento a cada trimestre ) e tenho o seguinte resultado, que está correto :
select r_social as empresa, quarter(compet_cont) as trimestre ,
format((sum(vlr_bruto_cont) )-((((((((((sum(vlr_bruto_cont)*32/100))*15/100)))+(IF ((((((sum(vlr_bruto_cont)*32/100))))>60000),((((((sum(vlr_bruto_cont)*32/100))))-60000)*10/100),0))+
((((sum(vlr_bruto_cont)*32/100))*9/100)))+( sum(vlr_bruto_cont)*3.65/100)+(sum(vlr_bruto_cont)*2/100) )))) ,2) as Sobraliquida
FROM contnotas join prestador on prestador_id_cont=id_prest
where empresa_do_grupo='s' and
year(compet_cont)='2014'
group by quarter(compet_cont),r_social order by r_social,trimestre limit 10
Resultado:
Empresa Trimestre Sobralíquida
A 1 74,957.81
A 2 102,890.97
A 3 46,230.00
A 4 133,038.04
B 4 174,785.81
C 4 161,478.47
D 1 302,663.09
D 2 358,024.09
D 3 270,894.76
D 4 95,125.61
Porém, quando tento agrupar para que a busca consolide para mim, ela apresenta o seguinte retorno ( arredondando os valores e dividindo por 1000 !!! ) estou com uma suspeita que diria respeito à virugua.... porém não consegui resolver :
select empresa,sum(Sobraliquida) from (
select r_social as empresa, quarter(compet_cont) as trimestre ,
format((sum(vlr_bruto_cont) )-((((((((((sum(vlr_bruto_cont)*32/100))*15/100)))+(IF ((((((sum(vlr_bruto_cont)*32/100))))>60000),((((((sum(vlr_bruto_cont)*32/100))))-60000)*10/100),0))+
((((sum(vlr_bruto_cont)*32/100))*9/100)))+( sum(vlr_bruto_cont)*3.65/100)+(sum(vlr_bruto_cont)*2/100) )))) ,2) as Sobraliquida
FROM contnotas join prestador on prestador_id_cont=id_prest
where empresa_do_grupo='s' and
year(compet_cont)='2014'
group by quarter(compet_cont),r_social order by r_social,trimestre limit 10
) cc
group by empresa
Resultado ( não retorna a soma de cada empresa.... e sim um número arredondado )
Empresa sum(Sobraliquida)
A 355
B 174
C 161
D 1025
Será que alguém me daria uma dica ?
Obrigado
Ed Junior
select r_social as empresa, quarter(compet_cont) as trimestre ,
format((sum(vlr_bruto_cont) )-((((((((((sum(vlr_bruto_cont)*32/100))*15/100)))+(IF ((((((sum(vlr_bruto_cont)*32/100))))>60000),((((((sum(vlr_bruto_cont)*32/100))))-60000)*10/100),0))+
((((sum(vlr_bruto_cont)*32/100))*9/100)))+( sum(vlr_bruto_cont)*3.65/100)+(sum(vlr_bruto_cont)*2/100) )))) ,2) as Sobraliquida
FROM contnotas join prestador on prestador_id_cont=id_prest
where empresa_do_grupo='s' and
year(compet_cont)='2014'
group by quarter(compet_cont),r_social order by r_social,trimestre limit 10
Resultado:
Empresa Trimestre Sobralíquida
A 1 74,957.81
A 2 102,890.97
A 3 46,230.00
A 4 133,038.04
B 4 174,785.81
C 4 161,478.47
D 1 302,663.09
D 2 358,024.09
D 3 270,894.76
D 4 95,125.61
Porém, quando tento agrupar para que a busca consolide para mim, ela apresenta o seguinte retorno ( arredondando os valores e dividindo por 1000 !!! ) estou com uma suspeita que diria respeito à virugua.... porém não consegui resolver :
select empresa,sum(Sobraliquida) from (
select r_social as empresa, quarter(compet_cont) as trimestre ,
format((sum(vlr_bruto_cont) )-((((((((((sum(vlr_bruto_cont)*32/100))*15/100)))+(IF ((((((sum(vlr_bruto_cont)*32/100))))>60000),((((((sum(vlr_bruto_cont)*32/100))))-60000)*10/100),0))+
((((sum(vlr_bruto_cont)*32/100))*9/100)))+( sum(vlr_bruto_cont)*3.65/100)+(sum(vlr_bruto_cont)*2/100) )))) ,2) as Sobraliquida
FROM contnotas join prestador on prestador_id_cont=id_prest
where empresa_do_grupo='s' and
year(compet_cont)='2014'
group by quarter(compet_cont),r_social order by r_social,trimestre limit 10
) cc
group by empresa
Resultado ( não retorna a soma de cada empresa.... e sim um número arredondado )
Empresa sum(Sobraliquida)
A 355
B 174
C 161
D 1025
Será que alguém me daria uma dica ?
Obrigado
Ed Junior
Edevardson Junior
Curtidas 0