申し訳ありませんが、タイトルは少し誤解を招くものです。次のテーブルがあるとします
-- user_tests テーブル 名前 | タイプ ------------------------|---------------- ID | int(11) ユーザー ID | int(11) test_schedule_id | int(11) device_user_test_id | varchar(255) 所要時間 | int(11) 合計マーク | int(11) 合計_質問 | int(11) 試行回数 | int(11) created_at | 日付時刻 updated_at | 日付時刻
-- user_test_questions テーブル 名前 | タイプ --------------|------------- ID | 整数 user_test_id | 整数 所要時間 | 整数 mark_obtained | 整数 質問ID | 整数 正しいです | 列挙 test_section_id | 整数 created_at | 日付時刻 updated_at | 日付時刻
表のデータは、 でuser_tests
識別される特定の試験を受けた学生のリストですtest_schedule_id
。それぞれtest_schedule_id
、 には 1 つ以上の がありtest_section_id
ます。
次の条件で学生のランクを計算しようとしています。
- 学生の total_marks に基づいてランクを取得する
test_schedule_id
- 前のケースのランクが同じ場合、ランクを取得
test_section_id
= 1 - 前のケースのランクが同じ場合、ランクを取得
test_section_id
= 2 - 前のケースのランクが同じ場合、ランクを取得
test_section_id
= 3 - 前のケースのランクが同じ場合、users テーブルにあるユーザーの生年月日のランクを取得します
Rails (または任意のフレームワーク) で簡単に実行できますが、それを避けて、View
またはを使用して SQL で解決したいと考えていますStored Procedure
。
ランクを個別に計算する方法はわかりましたが、これらの条件を組み合わせるのに苦労しています。これを行う方法はありますか?MS SQL Server の Rank() 関数が不足していると思います。
ありがとうございました
編集:テーブル内またはテーブル内のいずれかtotal_marks
に基づいてランク付けします。user_tests
SUM(marks_obtained)
user_test_questions