Har*_*rev 2 mysql database sql-order-by database-performance
我们假设一个users表格如下:
age | popularity
------------------
16 | 2
23 | 5
17 | 2
16 | 3
... | ...
... | ...
Run Code Online (Sandbox Code Playgroud)
我想选择年龄较小,受欢迎程度较高的行.但不要选择一个而不是另一个.
附:
SELECT *
FROM `users`
ORDER BY `age` ASC, `popularity` DESC
Run Code Online (Sandbox Code Playgroud)
我们将把年轻用户放在首位,并且具有相同用户的用户age将按他们自己的流行度排序.
与:
SELECT *
FROM `users`
ORDER BY `popularity` DESC, `age` ASC
Run Code Online (Sandbox Code Playgroud)
我们将在上面最流行的用户和用户使用相同popularity的排序age三者结合起来.
但我不想选择另一种排序.我想混淆它们.
如何实现基于60%popularity和40%的排序age?
是否有这种分类的通用解决方案?自定义功能是唯一的选择吗?
更新:取样所需的结果
age | popularity
------------------
16 | 8
15 | 2
23 | 5
29 | 10
16 | 3
16 | 2
17 | 2
Run Code Online (Sandbox Code Playgroud)
因此,如果用户非常年轻,即使人气较少,她也应该更高.如果用户非常受欢迎,即使她年纪较大,她也应该更高.
最年轻,最受欢迎的应该始终排在最前面.最老和最不受欢迎的应该总是在底部.
我正在寻找一个通用的解决方案,不仅仅是数字,还有日期,字符串等.
select *, priority*0.6+age*0.4 as sortkey from ... order by sortkey.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2610 次 |
| 最近记录: |