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
ます。
しかし、私は一方を他方よりもソートすることを選びたくありません。それらを混ぜたい。
popularity
60%に基づいて、40%に基づいてソートを行うにはどうすればよいage
ですか?
そのような分類のための汎用ソリューションはありますか?カスタム関数が唯一のオプションですか?
更新:望ましい結果のサンプル
age | popularity
------------------
16 | 8
15 | 2
23 | 5
29 | 10
16 | 3
16 | 2
17 | 2
したがって、ユーザーが非常に若い場合は、人気が低くても彼女は高くなるはずです。ユーザーが非常に人気がある場合は、年上であっても彼女は高くなるはずです。
最も若くて最も人気のあるものは常に一番上にあるべきです。最も古く、最も人気のないものは常に一番下にあるはずです。
数字だけでなく、日付や文字列などの汎用ソリューションを探しています。