我们假设一个users
表,如:
age | popularity
------------------
16 | 2
23 | 5
17 | 2
16 | 3
... | ...
... | ...
我想选择年龄较小,受欢迎程度较高的行。但不要选择那个而不是另一个。
使用:
SELECT *
FROM `users`
ORDER BY `age` ASC, `popularity` DESC
我们会将年轻用户放在首位,而具有相同age
的用户将按其受欢迎程度排序。
并且:
SELECT *
FROM `users`
ORDER BY `popularity` DESC, `age` ASC
我们将拥有最受欢迎的用户,以及由popularity
订购age
的用户。
但我不想选择另一种排序。我想混淆它们。
如何根据popularity
和基于age
的40%进行排序?
这种分类是否有通用的解决方案?自定义功能是唯一的选择吗?
更新:示例所需结果
age | popularity
------------------
16 | 8
15 | 2
23 | 5
29 | 10
16 | 3
16 | 2
17 | 2
因此,如果用户非常年轻,即使人气较少,她也应该更高。如果用户非常受欢迎,即使她年纪较大,她也应该更高。
最年轻,最受欢迎的应该始终排在最前面。最老和最不受欢迎的应该始终在最底层。
我正在寻找一种通用的解决方案,不仅仅是数字,还包括日期,字符串等。
答案 0 :(得分:5)
select *, priority*0.6+age*0.4 as sortkey from ... order by sortkey.