Ir para conteúdo

POWERED BY:

Arquivado

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

Caio Cafardo

GROUP BY e ORDER BY

Recommended Posts

E aí pessoal, to com uma treta em um SELECT no MYSQL.

To fazendo um bolão pra copa, até aí ta indo tudo beleza, a treta apareceu na hora do ranking, vou explicar o porque.

Se o usuário acerta um placar exato ele marca 10 pontos, se acerta só o placar do vencedor 5 pontos, e assim vai.

Aí a tabela da pontuação fica assim:

 

id inscrito jogo ponto tipo
26 5 3 0 6
22 5 2 5 3
18 5 1 10 1
23 6 2 0 6
19 6 1 5 3
27 6 3 5 3
20 7 1 10 1
28 7 3 8 2
24 7 2 5 3
21 8 1 10 1
25 8 2 0 6
29 8 3 0 6

Inscrito é o ID do jogador
Jogo é o jogo que ele marcou esse ponto
Ponto é quantos pontos ele fez
Tipo é o tipo de acerto que teve, se foi exato, se foi só o placar do vencedor, etc..

No SELECT pra gerar o ranking eu fiz assim:

$sql0 = "SELECT sum(ponto) as total, inscrito FROM ponto GROUP BY inscrito ORDER BY total DESC";

Deu certinho, a treta é no desempate, caso duas pessoas empatem um número de pontos, o desempate seria o campo tipo, ou seja, quem acertou mais placar exato (tipo 1), caso ainda de empate, quem acertou mais o placar do vencedor(tipo 2), e assim vai

Como fazer esse desempate?

Espero que tenha sido claro!

Compartilhar este post


Link para o post
Compartilhar em outros sites


select inscrito,

sum(pontos) as pontos,

sum(IF(tipo = 1, 1, 0)) as qtde_exatos,

sum(IF(tipo = 2, 1, 0)) as qtde_vencedor,

sum(IF(tipo = 3, 1, 0)) as qtde_outro_tipo

from

ponto

group by

inscrito

order by

2 DESC, 3 DESC, 4 DESC, 5 DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você quer dizer com "não rolou"?

Retornou algum erro? Que erro?

Leu a consulta antes de executar?

Viu se todos os nomes de campos estão corretos?

 

Sobre o IF

https://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html



sobre o sum

 

https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quase:

 

se o tipo = 1, então some 1, se não 0

se o tipo = 2, então some 1, se não 0

se o tipo = 3, então some 1, se não 0

 

ou seja, ele vai "contando" quantos registros tem de um determinado tipo para o agrupamento informado.

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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