Como encomendar por várias colunas com a prioridade diferente para cada coluna?
-
12-12-2019 - |
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.
Solução
select *, priority*0.6+age*0.4 as sortkey from ... order by sortkey.