如何按每列不同优先级的多列排序?

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)

因此,如果用户非常年轻,即使人气较少,她也应该更高.如果用户非常受欢迎,即使她年纪较大,她也应该更高.

最年轻,最受欢迎的应该始终排在最前面.最老和最不受欢迎的应该总是在底部.

我正在寻找一个通用的解决方案,不仅仅是数字,还有日期,字符串等.

use*_*421 5

select *, priority*0.6+age*0.4 as sortkey from ... order by sortkey.
Run Code Online (Sandbox Code Playgroud)

  • @HaralanDobrev它使数据库非规范化.如果您想这样做,请定义一个视图. (2认同)