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 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...
       
       
       
    • By marcossantana10
      Queria saber se é possível alterar a ordem com que os subdiretórios de um diretório é listado. Exemplo:
       
      Tenho um diretório raiz que possuem os seguintes diretórios: 2013, 2014, 2015, [...].
      Tem como fazer com que eles sejam mostrados em uma ordem específica?
       
      Código que tô usando:
      $baseDir = 'diretorio/'.$dirDinamico; $abreDir = (@$_GET['dir'] != '' ? $_GET['dir'] : $baseDir); $strrdir = strrpos(substr($abreDir,0,-1),'/'); $backdir = substr($abreDir, 0,$strrdir+1); $openDir = dir($abreDir); while($arq = $openDir -> read()): if($arq != '.' && $arq != '..'): if(is_dir($abreDir.$arq)){ //aqui é a parte que organizo (visualmente) a exibição dos diretórios.  
    • By brunaFD
      olá
      então, eu estou fazendo um algoritmo aqui, e cheguei uma parte que não sei como proceder, pois não sei como realizar o calculo
      eu sei fazer porcentagem normal, mas no caso por exemplo
      tenho o valor 75 e o 14
      14 é quantos por cento de 75?
      não sei como fazer isso, se puderem me ajudar, ficarei agradecida. obrigada
×

Important Information

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