No.5ベストアンサー
- 回答日時:
一般にSQLで順位を求めるには、「あるレコードのスコアより高いスコアのレコード数をカウントして+1する」という考え方をします。
この方法だと、ソート結果の行番号を使うよりも、同じスコアのレコードの順位が正しく求められる点で優れています。
ご質問のケースでは、順位付けの条件が少しだけ複雑になりますが、以下のようなSQLでレコードごとの順位が求められると思います。(特定レコードのみを対象にしたい場合、最後にwhere句を追加します)
select score1, score2, (select count(*) from hogetable t2 where t2.score1 > t1.score1 or (t2.score1 = t1.score1 and t2.score2 < t1.score2)) + 1 as rank from hogetable t1;
ただし、多数のレコードについて順位を求める場合、ソート結果を取得してプログラムで手続き的に処理した方が効率は良いです。(PL/pgSQLも使えます)
余談)
PL/pgSQLって、PostgreSQLの関数を記述する手続き言語のことで、この質問の場合でしたら、単にPostgreSQLと言った方が良いのではないでしょうか。
ありがとうございました。
PostgreSQLに限定されない一般的な考え方を教えていただき、
大変参考になりました。
>余談)
PL/pgSQLとPostgreSQLの違いもはっきりわからず混同していたので
こちらのご指摘も参考になりました。
ありがとうございます。
No.3
- 回答日時:
回答No.1 の mellowy です。
勘違いしてましたね。すみません。
環境がなくPL/pgSQLをあまり使ったことがないので
わからないのですが、以下のSQL文でいかがでしょうか?
間違っていたらごめんなさい。
SELECT ROWNUM, * FROM テーブル名 ORDER BY score1 DESC, score2 ASC
この回答への補足
PL/pgSQLでは、
ERROR: Attribute 'rownum' not found
になってしまうようです。
where句の中でテーブルを別名で呼べばよいのかなぁ、
というイメージがするのですが、具体的に思い浮かばなくて・・・。
本当に、たびたびありがとうございます。
No.1
- 回答日時:
以下のSQLでどうでしょうか?
条件としては
・SCORE1, SCORE2 共に値(点)がある。
・SCORE1, SCORE2 は数値タイプかもしくは
桁数固定の文字列タイプ
※桁数3桁の場合
4 → 004
10 → 010 など
SELECT * FROM テーブル名 ORDER BY score1 DESC, score2 ASC
この回答への補足
ご回答ありがとうございました。
説明不足でした。
順位順にレコード検索するだけでなく、
順位を求める(付加する)方法が知りたかったのです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python コードについて(初学者です) 3 2023/07/20 14:44
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- 英語 score(スコア)は20、という意味もある three score years and ten.( 3 2022/12/17 23:53
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- 英語 Purpose: This study analyzed procedural results as 3 2022/11/17 21:03
- 英語 score (20)という意味で リンカーンの演説では four score and seven y 2 2022/12/21 23:20
- 日本語 こんばんは。 How can I say in japanese that I have got t 4 2022/05/15 14:24
- C言語・C++・C# C言語 3 2022/11/09 13:27
- 日本語 こんばんは。 Is there a way in japanese to say "I couldn 2 2022/05/12 20:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つの項目が重複するレコード...
-
ManagementStudioからのデータ削除
-
数百万件レコードのdelete
-
データの二重表示の原因
-
3つ以上のテーブルをUNIONする...
-
Access VBA Me.Requery レコー...
-
Access 1レコードずつcsvで出力...
-
Accessにインポートしたら並び...
-
Accessでの排他制御
-
ACCESS【更新クエリの中断がで...
-
いちばん最後のレコードに値の...
-
ACCESSのBookmarkプロパティの...
-
Access 削除クエリが重い
-
Accessでの禁止文字チェック
-
DB INSERT 時の排他制御について
-
DB2のデーターベースに、ADOで...
-
お気に入りをテーブルに格納す...
-
Accessの重複クエリで最小以外...
-
一部重複しているレコードの削除
-
(ACCESS)並び替えをしないで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessにインポートしたら並び...
-
3つ以上のテーブルをUNIONする...
-
データの二重表示の原因
-
数百万件レコードのdelete
-
Access VBA Me.Requery レコー...
-
2つの項目が重複するレコード...
-
Access 1レコードずつcsvで出力...
-
ACCESSのBookmarkプロパティの...
-
SQLの複数のカウントについて
-
ManagementStudioからのデータ削除
-
SQLServerで同一条件レコードの...
-
Accessでの禁止文字チェック
-
Access 削除クエリが重い
-
Accessでレコードが更新された...
-
非連結サブフォームのレコード...
-
Accessでの排他制御
-
Access カレントレコードがあり...
-
Accessの重複クエリで最小以外...
-
(ACCESS)並び替えをしないで...
-
テーブルのレコード削除ができ...
おすすめ情報