Pergunta

Vamos supor que um users a tabela como:

 age  | popularity
------------------
  16  |     2
  23  |     5
  17  |     2
  16  |     3
 ...  |    ...
 ...  |    ...

Eu quero selecionar linhas com menor idade e maior popularidade.Mas não para escolher um sobre o outro.

Com:

SELECT *
FROM `users`
ORDER BY `age` ASC, `popularity` DESC

Teremos o filho, usuários e usuários com o mesmo age seria ordenar por popularidade entre si.

E com:

SELECT *
FROM `users`
ORDER BY `popularity` DESC, `age` ASC

Temos a mais popular usuários e usuários com o mesmo popularity ordenar por age entre si.

Mas eu não quero escolher a ordenação sobre o outro.Eu quero misturá-las.

Como faço para conseguir a classificação com 60% de acordo com a popularity e 40%, com base no age?

Há um propósito geral de solução para tal classificação?É uma função personalizada, a única opção?

ATUALIZAÇÃO:Exemplo de resultados desejados

 age  | popularity
------------------
  16  |     8
  15  |     2
  23  |     5
  29  |    10
  16  |     3
  16  |     2
  17  |     2

Então, se um usuário é muito jovem, ela deve ser maior, mesmo com menor popularidade.Se um usuário é bastante popular, ela deve ser maior, mesmo se ela é mais velha.

O mais jovem e mais popular deve estar sempre no topo.O mais antigo e o menos popular deve ser sempre no fundo.

Eu estou olhando para um propósito geral de solução, não apenas por números, mas por datas, cordas e assim por diante.

Foi útil?

Solução

select *, priority*0.6+age*0.4 as sortkey from ... order by sortkey.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top