让我们假设一个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
我们将在上面最流行的用户和用户与age
它们之间的有序相同popularity
。
但我不想选择一个排序。我想混合起来。
如何根据popularity
和40%基于age
实现60%的分类?
是否有这种排序的通用解决方案?自定义功能是唯一的选择吗?
UPDATE:样品期望的结果
age | popularity
------------------
16 | 8
15 | 2
23 | 5
29 | 10
16 | 3
16 | 2
17 | 2
因此,如果用户是非常年轻的,她应该会更高,甚至更小的人气。如果用户很流行,即使年龄较大,她也应该更高。
最年轻和最受欢迎的应该总是在最上面。最古老和最不受欢迎的应该总是在最底层。
我在寻找一个通用的解决方案,不仅仅是数字,而是日期,字符串等等。
你能显示样本结果吗? –
@JohnWoo示例结果添加并解释了一下。 –