別の方法でorder byを適用したい MySQL データベースのクエリから、特別な種類の要件を探しています。たとえば、フィールドuser_idとuser_ratingとuser_departmentを持つ DB で、次のデータを使用します。
+------------------------------------------------------+
| user_id | user_rating | user_department |
+------------------------------------------------------+
| 1 | 102 | A |
| 2 | 33 | B |
| 3 | 43 | C |
| 4 | 54 | A |
| 5 | 63 | A |
| 6 | 214 | B |
| 7 | 82 | A |
| 8 | 87 | C |
| 9 | 43 | A |
| 10 | 98 | A |
| 11 | 73 | C |
| 12 | 31 | A |
+------------------------------------------------------+
上記の構造を考えると、結果をeach_departmentのuser_ratingの順にソートしたいのですが、各 user_department から最大 5 つのレコードが必要です。そのうちの最初の 3 つのレコードは評価の順に並べる必要がありますが、残りの 2 つはランダムにする必要があります。
したがって、上記の場合、出力は次のようになります。
+------------------------------------------------------+
| user_id | user_rating | user_department |
+------------------------------------------------------+
| 1 | 102 | A |
| 10 | 98 | A |
| 7 | 82 | A |
| 12 | 31 | A |
| 5 | 63 | A |
| 6 | 214 | B |
| 2 | 33 | B |
| 8 | 87 | C |
| 11 | 73 | C |
| 3 | 43 | C |
+------------------------------------------------------+
FIELD関数を使用するなど、カスタムオーダーのためにWebで利用できるオプションを試しましたが、ここではそれほど有用ではありませんでした。また、サブクエリを使用して解決しようとしましたが、MySql ではクエリで IN キーワードと LIMIT キーワードを一緒に使用できないため、そのオプションも実行可能に見えません。
これを解決するためのより良い/簡単な方法はありますか?