让我们假设一个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
。
但我不想选择一个排序。我想把它们混合起来。
如何实现基于 60%popularity
和基于 40% 的排序age
?
这种排序有通用解决方案吗?自定义函数是唯一的选择吗?
更新:样本期望的结果
age | popularity
------------------
16 | 8
15 | 2
23 | 5
29 | 10
16 | 3
16 | 2
17 | 2
因此,如果用户非常年轻,即使人气较低,她也应该更高。如果用户很受欢迎,即使她年龄较大,她也应该更高。
最年轻、最受欢迎的人应该永远在最前面。最古老和最不受欢迎的应该总是在底部。
我正在寻找一种通用的解决方案,不仅适用于数字,还适用于日期、字符串等。