アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLの処理について質問です。

成績管理用のデータをテーブルに格納しております。
最初に、日付・科目・名前・点数のデータをINSERTします。

例)
id 日付 科目 名前 点数 順位
1 2021/04/20 理科 佐藤 86 None
2 2021/04/20 理科 山田 46 None
3 2021/04/20 理科 田中 96 None
4 2021/04/20 理科 小林 97 None
5 2021/04/20 社会 佐藤 86 None
6 2021/04/20 社会 鈴木 50 None
7 2021/08/21 理科 佐藤 66 None
8 2021/08/21 理科 山田 99 None
9 2021/08/21 理科 田中 50 None
10 2021/08/21 理科 小林 55 None


各科目のテスト順位を計算し、Noneになっているカラムに順位を入力したいです。
すなわち、対象となる行を選択し、該当するカラムを比較・計算して、最終的に希望のカラムへ結果を入力する処理です。

この処理をSQL上でどのように書けばよいのか、調べたのですがいまいち方法が掴めませんでしたので、知恵をお借りしたく存じます。

なお、同日に同一科目のテストは複数実施しておりませんが、別日には実施しています。
つまり、各テストの区別は日付列と科目列の両方をチェックする必要があります。



処理後、下記のようになるのがゴールです。

例)
id 日付 科目 名前 点数 順位
1 2021/04/20 理科 佐藤 86 3
2 2021/04/20 理科 山田 46 4
3 2021/04/20 理科 田中 96 2
4 2021/04/20 理科 小林 97 1
5 2021/04/20 社会 佐藤 86 1
6 2021/04/20 社会 鈴木 50 2
7 2021/08/21 理科 佐藤 66 2
8 2021/08/21 理科 山田 99 1
9 2021/08/21 理科 田中 50 4
10 2021/08/21 理科 小林 55 3



SQL上での処理が難しければ、一度データを取り出して、Pythonで順位を計算したあと、結果を順位カラムへINSERTすることを考えています。

よろしくお願いします。

質問者からの補足コメント

  • HAPPY

    リンクありがとうございます。
    RANK関数を用い、PARTITIONで日付と科目の2つを指定することでできそうです。
    助かりました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/01/22 08:47

A 回答 (1件)

この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す