Jump to content
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

Share this post


Link to post
Share on other 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?
 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By 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.
    • By 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.
    • By 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? 
       
    • By Mateus Cruz
      Galera, vamos lá, estou com um problemão para realizar a ordenação de alguns dados...
       
      Tenho uma tabela com 10 colunas de respostas (ds_answer[1...10])
      Esta coluna recebe valores A (Alta), M (Média);
       
      Preciso ordenar a view com os que contém mais A no top...
      Há algum meio? 
      Consegui apenas ordenar pelo que tivesse maior sequência de A...
       
       
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.