Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

playnet

Ordenação de coluna e cálculo de porcentagem utilizando resultados de select

Recommended Posts

Boa noite pessoal,

 

Gostaria se possível de duas ajudas:

 

1) Porque a ordenação que defini como coluna 1 mostra o resultado errado? Parece que está considerando a ordenação pela coluna 2. 
Obs: Se eu deixar ativo apenas o primeiro select funciona ok, se mantenho o UNION ele mostra errado.
2) Consigo calcular a porcentagem utilizando o resultado dos selects? Eu gostaria de utilizar o resultado do count do select1 (Quantity) com o resultado de count do resultado 2 (Total) para gerar a porcentagem numa coluna 5. Coluna 5 seria:  (Quantity*100)/Total 

 

Segue a consulta:

 

(SELECT count(m.id_match) as Quantity, d.nome as OppDeck, f.nome as Format, tp.nome as League
FROM tipoleague tp, leagues l, formatos f, matches m, decks d
WHERE d.id_deck=m.opp_deck and l.id_formato=f.id_formato and l.id_league=m.id_league and tp.id_tipoleague=l.id_tipoleague
and f.nome='Modern' and tp.nome='Competitive' and date(m.data) between '2017/11/01' and '2017/11/14' 
group by OppDeck, Format, League
order by 1 desc)
UNION  (SELECT count(m.opp_deck) as Total, "All Decks", f.nome, tp.nome
FROM tipoleague tp, leagues l, formatos f, matches m, decks d
WHERE d.id_deck=m.opp_deck and l.id_formato=f.id_formato and l.id_league=m.id_league and tp.id_tipoleague=l.id_tipoleague
and f.nome='Modern' and tp.nome='Competitive' and date(m.data) between '2017/11/01' and '2017/11/14' 
group by f.nome, tp.nome)

 

Resultado:

 

image.png.f7202f8ac524f415e7f62c0fa76e51bf.png

 

Agradeço desde já,

Alex

Compartilhar este post


Link para o post
Compartilhar em outros sites

***Update***

 

Em relação a dúvida 2, consegui fazendo dessa forma:

 

(SELECT count(m.id_match) as Quantity, d.nome as OppDeck, f.nome as Format, tp.nome as League, ROUND(((count(m.id_match)*100)/(SELECT count(m.id_match)
FROM tipoleague tp, leagues l, formatos f, matches m, decks d
WHERE d.id_deck=m.opp_deck and l.id_formato=f.id_formato and l.id_league=m.id_league and tp.id_tipoleague=l.id_tipoleague
and f.nome='Modern' and tp.nome='Competitive' and date(m.data) between '2017/11/01' and '2017/11/14' and m.opp_deck is not null)),2) as Porcent

FROM tipoleague tp, leagues l, formatos f, matches m, decks d
WHERE d.id_deck=m.opp_deck and l.id_formato=f.id_formato and l.id_league=m.id_league and tp.id_tipoleague=l.id_tipoleague
and f.nome='Modern' and tp.nome='Competitive' and date(m.data) between '2017/11/01' and '2017/11/14' 
group by OppDeck, Format, League
order by 1 desc)
UNION 
(SELECT count(m.id_match) as Total, null as OppDeck, f.nome as Format, tp.nome as League, null as Porcent
FROM tipoleague tp, leagues l, formatos f, matches m, decks d
WHERE d.id_deck=m.opp_deck and l.id_formato=f.id_formato and l.id_league=m.id_league and tp.id_tipoleague=l.id_tipoleague
and f.nome='Modern' and tp.nome='Competitive' and date(m.data) between '2017/11/01' and '2017/11/14' and m.opp_deck is not null
group by Format, League)

 

image.png.d4fd47f6f22586f26e38c5e99328ca29.png

 

Acredito que uma função seria a maneira mais correta e limpa de se calcular isso.

 

Em relação a dúvida 1, achei aqui no forum um usuário q teve a mesma situação,  e um moderador respondeu q UNION e ORDER BY individual no select não está correto. Com base nisso, como eu faria para gerar essa última linha (totalização da coluna 1) mantendo a ordenação dos registros acima? Isso é possível?
 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por DuRodrig
      Pessoal, bom dia! 
      Estou fazendo uma página com um cálculo simples de porcentagem.
      Existe um formuário que coloco o valor da venda, a comissão é fixa em 13% e a tarifa é um valor que você coloca também.
      Exemplo: (valor da venda) R$ 100,00 - (comissão 13%) - (tarifa) R$ 8,50 = (resultado) R$ 78,50, só que está gerando o resultado de R$ 79,00.
      Como faço para corrgir esse problema?
      Segue o código:

       
      $(function(){ $('#valorVenda').on('input', function() { calculate(); }); $('#tarifa').on('input', function() { calculate(); }); function calculate(){ var pPos = parseFloat($('#valorVenda').val()); var tar = parseFloat($('#tarifa').val()); var result = " "; if(isNaN(pPos) || isNaN(tar)){ }else{ result = ((pPos - ((13.00 * pPos) / 100.00)) - tar).toFixed(2); } $('#total').val(result); } });  
      Desde já agradeço.
    • Por aantunesl
      Senhores, por gentileza me ajudem na seguinte questão:
      Tenho um determinado valor, e quero acrescentar 10% no total. Detalhe, os 10% é em cima do valor.
       
      <!-- preciso incluir os 10% aqui --> <td>R$<?= number_format($valor, 2) ?></td> <!-- preciso incluir aqui tambem --> <p style="font-size:15px;">R$ {{number_format($payment->valor, 2, ',', '.') }}</p> Agradeço a força.
    • Por EstilloWeb
      Está ocorrendo um erro em meu comando MySQL na ordenação dos resultados. O código é o seguinte:
      $sql_imos4 = "Select DISTINCT imovel FROM propostas ORDER BY id DESC"; $exe_imos4 = mysqli_query($conexao, $sql_imos4); O objetivo é listar uma única vez um imóvel com proposta, mesmo que haja dois ou mais registros, sempre ordenado mais recente. O que está ocorrendo quando o imóvel tem mais de uma proposta cadastrada, a ordenação está sendo feita pelo ID da proposta mais antiga.
      Exemplo:
      imóvel ref. 4528 tem duas propostas, sendo que a mais recente tem o ID 235 porém aparece na listagem abaixo do imóvel ref. 4325, que tem uma só proposta e ID 230.
      O resultado deveria estar invertido neste caso.
      Onde pode estar o erro? Agradeço a ajuda.
    • Por recmarq
      Boa tarde,
       
      Eu tenho uma lista com vários itens, (P, M, G, 1, 2, 3, 4, 5, 6, 7, 8, 9).
      essa lista está desordenada e eu preciso ordenar por ordem alfabética e numérica, quando eu uso a ordenação de letras eu comparo com sinal de maior ">"
      exemplo = a > b
      Preciso ordena-los, alguém poderia me ajudar? 
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.