Consulta SQL - Porcentagem
Olá galera, é o seguinte, tenho uma consulta que retorna a porcentagem, ela está dessa forma a query
Ele retorna os dados assim:
Estipulante X | 27,81351
Estipulante Y | 0,4823151
Estipulante X | 32,79743
Estipulante Y | 22,34727
e assim ele vai montando até completar certinho a porcentagem, porém, eu queria diferente, exemplo, se um estipulante tem um produto, ou seja, foi rodado com sucesso, então eu queria que ele mostrasse assim:
Estipulante X | 100,00% rodou um, e foi com sucesso
Estipulante Y | 50,00 % rodou dois, e um com sucesso
Na minha consulta anterior, isso não acontece, ele contabiliza TODOS e faz o calculo da porcentagem baseado na contagem de todos os números...
Poderiam me ajudar? Agradeço desde já
select a.nome_canal, count(id_controle_entrada_macro) * 100 / cast((select count(1) from controle_entrada_macro_tb) as float(1)) from canal_tb as a join controle_entrada_tb as b on a.id_canal = b.id_canal join controle_entrada_macro_tb as c on b.id_controle_entrada = c.id_controle_entrada where descricao_erro = 'SUCESSO' GROUP BY a.nome_canal
Ele retorna os dados assim:
Estipulante X | 27,81351
Estipulante Y | 0,4823151
Estipulante X | 32,79743
Estipulante Y | 22,34727
e assim ele vai montando até completar certinho a porcentagem, porém, eu queria diferente, exemplo, se um estipulante tem um produto, ou seja, foi rodado com sucesso, então eu queria que ele mostrasse assim:
Estipulante X | 100,00% rodou um, e foi com sucesso
Estipulante Y | 50,00 % rodou dois, e um com sucesso
Na minha consulta anterior, isso não acontece, ele contabiliza TODOS e faz o calculo da porcentagem baseado na contagem de todos os números...
Poderiam me ajudar? Agradeço desde já
Patrick
Curtidas 0
Melhor post
Alex Lekao
05/01/2016
com um sum normal.
mas vc esta com dois selects, esse segundo select deveria estar dentro dos parenteses, e vc poderia usar um union all.
Acho que ficaria mais ou menos assim.
acho que seria isso.
mas vc esta com dois selects, esse segundo select deveria estar dentro dos parenteses, e vc poderia usar um union all.
Acho que ficaria mais ou menos assim.
select nome_canal, sum(total_sucesso) total_sucesso, sum(total_erro) total_erro from ( select a.nome_canal, count(c.id_controle_entrada_macro) as total_sucesso, 0 total_erro from canal_tb as a join controle_entrada_tb as b on a.id_canal = b.id_canal join controle_entrada_macro_tb as c on b.id_controle_entrada = c.id_controle_entrada where descricao_erro = 'SUCESSO' GROUP BY a.nome_canal union all select a.nome_canal, 0 total_sucesso, count(c.id_controle_entrada_macro) as total_erro from canal_tb as a join controle_entrada_tb as b on a.id_canal = b.id_canal join controle_entrada_macro_tb as c on b.id_controle_entrada = c.id_controle_entrada GROUP BY a.nome_canal ) as teste1
acho que seria isso.
GOSTEI 1
Mais Respostas
Isaac Jose
04/01/2016
bom dia.
primeiro faça um select agrupando X e Y depois faça outro para obter o percentual.
primeiro faça um select agrupando X e Y depois faça outro para obter o percentual.
GOSTEI 0
Patrick
04/01/2016
bom dia.
primeiro faça um select agrupando X e Y depois faça outro para obter o percentual.
primeiro faça um select agrupando X e Y depois faça outro para obter o percentual.
Isaac, bom dia! poderia ser mais claro? Se possível, com algum exemplo...
Grato.
GOSTEI 0
Alex Lekao
04/01/2016
acredito que ele esteja se referindo em vc montar o select dentro do outro fazendo as operacoes separadas.
Exemplo:
nao me lembro exatamente do codigo, mas acredito que essa seja a ideia.
faz um tempinho q nao uso. rsrsr
Exemplo:
SELECT OPERACAO2 CAMPO, OPERACAO2 CAMPO2, OPERACAO2 CAMPO3 FROM (SELECT OPERACAO1 CAMPO, OPERACAO1 CAMPO2, OPERACAO1 CAMPO3 FROM TABELA) AS OPERACAO2
nao me lembro exatamente do codigo, mas acredito que essa seja a ideia.
faz um tempinho q nao uso. rsrsr
GOSTEI 0
Patrick
04/01/2016
acredito que ele esteja se referindo em vc montar o select dentro do outro fazendo as operacoes separadas.
Exemplo:
nao me lembro exatamente do codigo, mas acredito que essa seja a ideia.
faz um tempinho q nao uso. rsrsr
Exemplo:
SELECT OPERACAO2 CAMPO, OPERACAO2 CAMPO2, OPERACAO2 CAMPO3 FROM (SELECT OPERACAO1 CAMPO, OPERACAO1 CAMPO2, OPERACAO1 CAMPO3 FROM TABELA) AS OPERACAO2
nao me lembro exatamente do codigo, mas acredito que essa seja a ideia.
faz um tempinho q nao uso. rsrsr
Eu consegui montar isso agora:
select a.nome_canal, count(id_arquivo) TOTAL_SUCESSO, ( select count(id_controle_entrada_macro) from canal_tb as a join controle_entrada_tb as b on a.id_canal = b.id_canal join controle_entrada_macro_tb as c on b.id_controle_entrada = c.id_controle_entrada group by a.nome_canal) TESTE from canal_tb as a join controle_entrada_tb as b on a.id_canal = b.id_canal join controle_entrada_macro_tb as c on b.id_controle_entrada = c.id_controle_entrada where descricao_erro = ('SUCESSO') group by a.nome_canal
Porém está dando erro na subquery, que retorna mais de um resultado, como eu poderia corrigir isso?
GOSTEI 0
Alex Lekao
04/01/2016
Bom, nesse caso o erro eh devido a subselect estar retornando mais de um valor, isso pode ser por causa do group by.
Vamos por parte entao, para tentar chegar num consenso.
o Seu select atual retorna esses dados, certo?
Estipulante X | 27,81351
Estipulante Y | 0,4823151
Estipulante X | 32,79743
Estipulante Y | 22,34727
esses valores a frente do pipe sao os percentuais, correto?
o que vc quer, eh que apresente agrupado e totalizando os percentuais e informando que foram dois itens, x e y, certo?
primeiro, teremos que ter a primeira parte dos dados, para depois fazer a select externa, do exemplo que citei, para fazer os outros calculos. ok?
vamos por partes, vamos chegar ao primeiro resultado primeiro, ok?
coloque um select que vc chegue nos primeiros dados, ai daremos sequencia.
Vamos por parte entao, para tentar chegar num consenso.
o Seu select atual retorna esses dados, certo?
Estipulante X | 27,81351
Estipulante Y | 0,4823151
Estipulante X | 32,79743
Estipulante Y | 22,34727
esses valores a frente do pipe sao os percentuais, correto?
o que vc quer, eh que apresente agrupado e totalizando os percentuais e informando que foram dois itens, x e y, certo?
primeiro, teremos que ter a primeira parte dos dados, para depois fazer a select externa, do exemplo que citei, para fazer os outros calculos. ok?
vamos por partes, vamos chegar ao primeiro resultado primeiro, ok?
coloque um select que vc chegue nos primeiros dados, ai daremos sequencia.
GOSTEI 0
Patrick
04/01/2016
Bom, nesse caso o erro eh devido a subselect estar retornando mais de um valor, isso pode ser por causa do group by.
Vamos por parte entao, para tentar chegar num consenso.
o Seu select atual retorna esses dados, certo?
Estipulante X | 27,81351
Estipulante Y | 0,4823151
Estipulante X | 32,79743
Estipulante Y | 22,34727
esses valores a frente do pipe sao os percentuais, correto?
o que vc quer, eh que apresente agrupado e totalizando os percentuais e informando que foram dois itens, x e y, certo?
primeiro, teremos que ter a primeira parte dos dados, para depois fazer a select externa, do exemplo que citei, para fazer os outros calculos. ok?
vamos por partes, vamos chegar ao primeiro resultado primeiro, ok?
coloque um select que vc chegue nos primeiros dados, ai daremos sequencia.
Vamos por parte entao, para tentar chegar num consenso.
o Seu select atual retorna esses dados, certo?
Estipulante X | 27,81351
Estipulante Y | 0,4823151
Estipulante X | 32,79743
Estipulante Y | 22,34727
esses valores a frente do pipe sao os percentuais, correto?
o que vc quer, eh que apresente agrupado e totalizando os percentuais e informando que foram dois itens, x e y, certo?
primeiro, teremos que ter a primeira parte dos dados, para depois fazer a select externa, do exemplo que citei, para fazer os outros calculos. ok?
vamos por partes, vamos chegar ao primeiro resultado primeiro, ok?
coloque um select que vc chegue nos primeiros dados, ai daremos sequencia.
Ok, o select que chega nos primeiros dados ditos anteriormente é esse:
select a.nome_canal, count(id_controle_entrada_macro) * 100 / cast((select count(1) from controle_entrada_macro_tb) as float(1)) -- + convert(numeric,(10),3) '%' from canal_tb as a join controle_entrada_tb as b on a.id_canal = b.id_canal join controle_entrada_macro_tb as c on b.id_controle_entrada = c.id_controle_entrada where descricao_erro = 'SUCESSO' GROUP BY a.nome_canal
Assim ele mostra:
Estipulante X | 27,81351
Estipulante Y | 0,4823151
Estipulante X | 32,79743
Estipulante Y | 22,34727
E agora?
GOSTEI 0
Alex Lekao
04/01/2016
basicamente, vc tera que montar o novo select onde sera feito os calculos que vc deseja.
Exemplo:
baseicamente seria assim o codigo.
onde eu coloquei nome_canal e porcentagem, é onde vc ira fazer a manipulacao dos dados para atingir os outros resultados que vc quer.
no exemplo eu so coloquei para informar os campos novamente, nao coloquei nenhuma informacao de calculo etc.
Exemplo:
select nome_canal, Porcentagem from ( select a.nome_canal, count(id_controle_entrada_macro) * 100 / cast((select count(1) from controle_entrada_macro_tb) as float(1)) as porcentagem -- + convert(numeric,(10),3) '%' from canal_tb as a join controle_entrada_tb as b on a.id_canal = b.id_canal join controle_entrada_macro_tb as c on b.id_controle_entrada = c.id_controle_entrada where descricao_erro = 'SUCESSO' GROUP BY a.nome_canal ) as teste
baseicamente seria assim o codigo.
onde eu coloquei nome_canal e porcentagem, é onde vc ira fazer a manipulacao dos dados para atingir os outros resultados que vc quer.
no exemplo eu so coloquei para informar os campos novamente, nao coloquei nenhuma informacao de calculo etc.
GOSTEI 0
Patrick
04/01/2016
basicamente, vc tera que montar o novo select onde sera feito os calculos que vc deseja.
Exemplo:
baseicamente seria assim o codigo.
onde eu coloquei nome_canal e porcentagem, é onde vc ira fazer a manipulacao dos dados para atingir os outros resultados que vc quer.
no exemplo eu so coloquei para informar os campos novamente, nao coloquei nenhuma informacao de calculo etc.
Exemplo:
select nome_canal, Porcentagem from ( select a.nome_canal, count(id_controle_entrada_macro) * 100 / cast((select count(1) from controle_entrada_macro_tb) as float(1)) as porcentagem -- + convert(numeric,(10),3) '%' from canal_tb as a join controle_entrada_tb as b on a.id_canal = b.id_canal join controle_entrada_macro_tb as c on b.id_controle_entrada = c.id_controle_entrada where descricao_erro = 'SUCESSO' GROUP BY a.nome_canal ) as teste
baseicamente seria assim o codigo.
onde eu coloquei nome_canal e porcentagem, é onde vc ira fazer a manipulacao dos dados para atingir os outros resultados que vc quer.
no exemplo eu so coloquei para informar os campos novamente, nao coloquei nenhuma informacao de calculo etc.
Com essa consulta, eu consegui trazer a quantidade de produtos com sucesso e com erro
select nome_canal, total_sucesso, total_erro from ( select a.nome_canal, count(c.id_controle_entrada_macro) as total_sucesso from canal_tb as a join controle_entrada_tb as b on a.id_canal = b.id_canal join controle_entrada_macro_tb as c on b.id_controle_entrada = c.id_controle_entrada where descricao_erro = 'SUCESSO' GROUP BY a.nome_canal ) as teste, ( select count(c.id_controle_entrada_macro) as total_erro from canal_tb as a join controle_entrada_tb as b on a.id_canal = b.id_canal join controle_entrada_macro_tb as c on b.id_controle_entrada = c.id_controle_entrada GROUP BY a.nome_canal ) as teste1
Porém ele está trazendo dados repetidos dos estipulantes,
Ex: Estipulante X | 214
Estipulante Y | 105
Estipulante X | 214
Estipulante Y | 105
Tanto no sucesso quanto no erro, como eu poderia corrigir isso?
GOSTEI 0
Patrick
04/01/2016
com um sum normal.
mas vc esta com dois selects, esse segundo select deveria estar dentro dos parenteses, e vc poderia usar um union all.
Acho que ficaria mais ou menos assim.
acho que seria isso.
mas vc esta com dois selects, esse segundo select deveria estar dentro dos parenteses, e vc poderia usar um union all.
Acho que ficaria mais ou menos assim.
select nome_canal, sum(total_sucesso) total_sucesso, sum(total_erro) total_erro from ( select a.nome_canal, count(c.id_controle_entrada_macro) as total_sucesso, 0 total_erro from canal_tb as a join controle_entrada_tb as b on a.id_canal = b.id_canal join controle_entrada_macro_tb as c on b.id_controle_entrada = c.id_controle_entrada where descricao_erro = 'SUCESSO' GROUP BY a.nome_canal union all select a.nome_canal, 0 total_sucesso, count(c.id_controle_entrada_macro) as total_erro from canal_tb as a join controle_entrada_tb as b on a.id_canal = b.id_canal join controle_entrada_macro_tb as c on b.id_controle_entrada = c.id_controle_entrada GROUP BY a.nome_canal ) as teste1
acho que seria isso.
Perfeito, só adicionei um GROUP BY no final fora dos parenteses, muito obrigado, agora para eu fazer o calculo da porcentagem, como ficaria, entre esses dois selects, eu colocaria PRIMEIRO valor * 100 / pelo segundo valor? Poderia me ajudar nisso?
GOSTEI 0
Alex Lekao
04/01/2016
Bom, primeiro precisaria saber o que em relacao ao que vc quer calcular.
Vamos ver se eu entendi o que vc esta querendo fazer.
Bom, como tem total de sucessos e total de erros, esses valores seriam o total produzido, correto?
Vamos ver se eu entendi o que vc esta querendo fazer.
Bom, como tem total de sucessos e total de erros, esses valores seriam o total produzido, correto?
GOSTEI 0
Patrick
04/01/2016
Bom, primeiro precisaria saber o que em relacao ao que vc quer calcular.
Vamos ver se eu entendi o que vc esta querendo fazer.
Bom, como tem total de sucessos e total de erros, esses valores seriam o total produzido, correto?
Vamos ver se eu entendi o que vc esta querendo fazer.
Bom, como tem total de sucessos e total de erros, esses valores seriam o total produzido, correto?
Exatamente, ou seja, em outras palavras a formula seria, total com sucesso * 100 / pelo total (da coluna total), então gostaria de saber como faço para fazer isso e assim mostrar
mais uma coluna no meu resultado, que ficaria: total_sucesso | total | porcentagem
Poderia me ajudar por favor?
GOSTEI 0
Patrick
04/01/2016
Bom, primeiro precisaria saber o que em relacao ao que vc quer calcular.
Vamos ver se eu entendi o que vc esta querendo fazer.
Bom, como tem total de sucessos e total de erros, esses valores seriam o total produzido, correto?
Vamos ver se eu entendi o que vc esta querendo fazer.
Bom, como tem total de sucessos e total de erros, esses valores seriam o total produzido, correto?
Obs: O total produzido já o valor da coluna total_erro que eu alterei agora para total, tinha errado na descrição.
GOSTEI 0
Alex Lekao
04/01/2016
o calculo pode ser feito do jeito que vc menciona.
basta vc adicionar mais uma coluna, somente com o calculo dos campos.
Exemplo:
((sum(total_sucesso)*100)/sum(total_erro)) as Porcentagem
acho que eh isso.
eu costumo colocar com os parenteses certinhos, para me certificar que a ordem de calculo seja feito conforme esperada, nao costumo deixar a cargo apenas da regra matematica. rsrsr
basta vc adicionar mais uma coluna, somente com o calculo dos campos.
Exemplo:
((sum(total_sucesso)*100)/sum(total_erro)) as Porcentagem
acho que eh isso.
eu costumo colocar com os parenteses certinhos, para me certificar que a ordem de calculo seja feito conforme esperada, nao costumo deixar a cargo apenas da regra matematica. rsrsr
GOSTEI 1
Isaac Jose
04/01/2016
(Y 105/ X 214)*100 = 49%
GOSTEI 0
Patrick
04/01/2016
o calculo pode ser feito do jeito que vc menciona.
basta vc adicionar mais uma coluna, somente com o calculo dos campos.
Exemplo:
((sum(total_sucesso)*100)/sum(total_erro)) as Porcentagem
acho que eh isso.
eu costumo colocar com os parenteses certinhos, para me certificar que a ordem de calculo seja feito conforme esperada, nao costumo deixar a cargo apenas da regra matematica. rsrsr
basta vc adicionar mais uma coluna, somente com o calculo dos campos.
Exemplo:
((sum(total_sucesso)*100)/sum(total_erro)) as Porcentagem
acho que eh isso.
eu costumo colocar com os parenteses certinhos, para me certificar que a ordem de calculo seja feito conforme esperada, nao costumo deixar a cargo apenas da regra matematica. rsrsr
Perfeito, foi, Muito obrigado Alex, me ajudou muito, Deus lhe abençoe, valeu iSAAC também, obrigado pessoal.
GOSTEI 0
Alex Lekao
04/01/2016
fmz!!!
Tamoae.
precisar de algo eh so falar.
Abraco.
Tamoae.
precisar de algo eh so falar.
Abraco.
GOSTEI 0
Isaac Jose
04/01/2016
Disponha. vc conseguiu resolver os outros que tinha? lekao conseguiu dar continuidade no seu?
GOSTEI 0
Patrick
04/01/2016
Disponha. vc conseguiu resolver os outros que tinha? lekao conseguiu dar continuidade no seu?
O do calculo da média movel ainda não consegui, parei de mexer nele para ver esse, vou voltar a trabalhar nele quando meu user da empresa for liberado para criação de functions, pois pelo que vi, só será possivel através delas.
GOSTEI 0
Isaac Jose
04/01/2016
e precisa pois tem que verificar o intervalo de dias sobre um período com verificação de feriados e etc. a única maneira que consegui fazer foi assim... mais nunca parei pra pensar se da pra fazer de outra forma kkkk.
GOSTEI 0
Patrick
04/01/2016
e precisa pois tem que verificar o intervalo de dias sobre um período com verificação de feriados e etc. a única maneira que consegui fazer foi assim... mais nunca parei pra pensar se da pra fazer de outra forma kkkk.
Bom, a parte de feriados não é importante, já que posso receber remessas dias de feriados e sabados e domingos, o importante é calcular dinamicamente apartir das datas que vai ter na tabela, ou seja, as datas de registro.
GOSTEI 0
Alex Lekao
04/01/2016
Tinha mais coisa?
nao percebi no post. rsrsr
foi mal. rsrsrsrsr
agora, eu uso um select para calcular dias uteis, sem utilizar funcoes, achei melhor assim, que o pessoal do ERP fica meio bolado qdo cria coisa a mais no banco que faca alguns "milagres". rsrsr
nao percebi no post. rsrsr
foi mal. rsrsrsrsr
agora, eu uso um select para calcular dias uteis, sem utilizar funcoes, achei melhor assim, que o pessoal do ERP fica meio bolado qdo cria coisa a mais no banco que faca alguns "milagres". rsrsr
Disponha. vc conseguiu resolver os outros que tinha? lekao conseguiu dar continuidade no seu?
GOSTEI 0
Patrick
04/01/2016
Tinha mais coisa?
nao percebi no post. rsrsr
foi mal. rsrsrsrsr
agora, eu uso um select para calcular dias uteis, sem utilizar funcoes, achei melhor assim, que o pessoal do ERP fica meio bolado qdo cria coisa a mais no banco que faca alguns "milagres". rsrsr
nao percebi no post. rsrsr
foi mal. rsrsrsrsr
agora, eu uso um select para calcular dias uteis, sem utilizar funcoes, achei melhor assim, que o pessoal do ERP fica meio bolado qdo cria coisa a mais no banco que faca alguns "milagres". rsrsr
Disponha. vc conseguiu resolver os outros que tinha? lekao conseguiu dar continuidade no seu?
Ter coisa tem, porém era assunto de outro post, enfim, explicando aqui, eu precisava criar uma query ou function, que retornasse baseado no valor que eu colocasse de dias, as médias moveis das minhas vendas, tipo bolsa de valores, e como não sou nenhum DBA, e nunca fiz, estou quebrando a cabeça pra fazer hahaa
GOSTEI 0
Alex Lekao
04/01/2016
ah ta, entendi.
bom, especificamente isso eu nunca montei.
qqr coisa, depois se eu achar o post tento acompanhar, para ver se consigo ajudar com algo. rsrsr
bom, especificamente isso eu nunca montei.
qqr coisa, depois se eu achar o post tento acompanhar, para ver se consigo ajudar com algo. rsrsr
GOSTEI 0
Patrick
04/01/2016
ah ta, entendi.
bom, especificamente isso eu nunca montei.
qqr coisa, depois se eu achar o post tento acompanhar, para ver se consigo ajudar com algo. rsrsr
bom, especificamente isso eu nunca montei.
qqr coisa, depois se eu achar o post tento acompanhar, para ver se consigo ajudar com algo. rsrsr
Segue o Link, se puder ajudar, fico muito agradecido: https://www.devmedia.com.br/forum/fazer-calculo-da-media-movel-com-datas/540809
GOSTEI 0
Alex Lekao
04/01/2016
blz.
vou dar uma olhada.
vou ter que entender primeiro o que eh essa media movel. rsrsr
mas qqr coisa la eu vejo e faco mais questionamentos. rsrsr
vou dar uma olhada.
vou ter que entender primeiro o que eh essa media movel. rsrsr
mas qqr coisa la eu vejo e faco mais questionamentos. rsrsr
GOSTEI 0
Patrick
04/01/2016
blz.
vou dar uma olhada.
vou ter que entender primeiro o que eh essa media movel. rsrsr
mas qqr coisa la eu vejo e faco mais questionamentos. rsrsr
vou dar uma olhada.
vou ter que entender primeiro o que eh essa media movel. rsrsr
mas qqr coisa la eu vejo e faco mais questionamentos. rsrsr
Links sobre média movel: http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:moving_averages
http://br.advfn.com/educacional/analise-tecnica/media-movel-simples
resumindo, é um grafico que a bolsa de valores usa...
GOSTEI 0
Alex Lekao
04/01/2016
entendi.
cara, para mim nao da. rsrsr
cara, para mim nao da. rsrsr
GOSTEI 0
Isaac Jose
04/01/2016
Kkkk claro que da começa a fazer .quando estiver fazendo relatórios no report fazemos uns desses kk
GOSTEI 0
Alex Lekao
04/01/2016
opa...
com certeza!!!
mas to querendo comecar com o feijao com arroz primeiro.
kkkkkk
mas eu gostei da ideia de media movel e tal, qdo apresentar algo desse tipo pro chefe ele com certeza vai gostar. rsrsr
com certeza!!!
mas to querendo comecar com o feijao com arroz primeiro.
kkkkkk
mas eu gostei da ideia de media movel e tal, qdo apresentar algo desse tipo pro chefe ele com certeza vai gostar. rsrsr
GOSTEI 0
Patrick
04/01/2016
Bom, se vocês com um nivel maior que eu estão achando meio dificil, imagina pra mim HEUEHUEHE, porém irei tentar e ver o que acontece! HUEHE
GOSTEI 0
Isaac Jose
04/01/2016
Não é difícil tenho uns 100 relatórios q fazem isso kkkk
GOSTEI 0
Alex Lekao
04/01/2016
no meu caso, eu preciso de mais tempo para entender o conceitual.
depois que conseguir entender(que eh o mais dificil. rsrsrs) eu vou de boa. kkkkkk
depois que conseguir entender(que eh o mais dificil. rsrsrs) eu vou de boa. kkkkkk
GOSTEI 0