Ir para conteúdo
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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por 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...
       
       
       
    • Por 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.  
    • Por 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
    • Por Doguinho programador
      Snake planeja fazer um jantar em casa para toda sua fam ́ılia. Para isso, ela encomendou uma lista de ingredientes, pois estava muito ocupada para ir ela mesma comprar. Quando a encomenda chegou, eis que surgiu um novo problema: conferir se tudo estava ali. Como a lista era muito grande, demandaria muito tempo de Snake para conferir a encomenda. Sabendo disso, ela pediu sua ajuda para conferir a encomenda, dados a lista de ingredientes que Snake pediu e a lista do que foi encontrado na encomenda.                    ENTRADA A primeira linha da entrada contem uma string S  : a lista de ingredientes que Snake encomendou. Cada diferente produto ́e indicado por um caractere mai ́usculo entre A e Z. A segunda linha contém uma string E: a lista dos ingredientes encontrados na caixa da encomenda, em formato similar a lista de ingredientes de Snake.   SAIDA
      Voce deve imprimir apenas uma ́unica palavra numa  unica linha: “Sim” caso a lista da encomenda contenha os produtos que Snake pediu, ou “Nao” caso esteja faltando algum produto ou se houver algum produto a mais. EXEMPLO: ENTRADA: OVOS SOOV SAIDA: SIM ----- ENTRADA:              ABTHAS
                   SHTAEB
                   SAIDA: NAO   SEGUE MEU CÓDIGO, MAS NÃO DEU MUITO CERTO E NÃO ESTOU CONSEGUINDO ENTENDER COMO RESOLVER A QUESTÃO POIS NÃO MANJO DIREITO DOS PARANAUÊ DE C++:  
×

Informação importante

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