2

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ます。

しかし、私は一方を他方よりもソートすることを選びたくありません。それらを混ぜたい。

popularity60%に基づいて、40%に基づいてソートを行うにはどうすればよいageですか?

そのような分類のための汎用ソリューションはありますか?カスタム関数が唯一のオプションですか?

更新:望ましい結果のサンプル

 age  | popularity
------------------
  16  |     8
  15  |     2
  23  |     5
  29  |    10
  16  |     3
  16  |     2
  17  |     2

したがって、ユーザーが非常に若い場合は、人気が低くても彼女は高くなるはずです。ユーザーが非常に人気がある場合は、年上であっても彼女は高くなるはずです。

最も若くて最も人気のあるものは常に一番上にあるべきです。最も古く、最も人気のないものは常に一番下にあるはずです。

数字だけでなく、日付や文字列などの汎用ソリューションを探しています。

4

1 に答える 1

6
select *, priority*0.6+age*0.4 as sortkey from ... order by sortkey.
于 2012-10-02T08:52:02.680 に答える