お世話になります。Oracle初心者です。RANK関数による順位付けについて悩み、検索してもわからず困っております。
次のような表tbがあります。
数値,順
70
10
30
この「順」のカラムに順位を付けて
数値,順
70,3
10,1
30,2
としようとしています。SELECTなら
SELECT 数値,rank() over (order by 数値 desc) from tb;
が成功します。これでupdateする場合、
(rank() over (order by 数値 desc))をした値を
update tb set 順=
とすればよいと思うのですが、うまくいきません。
PL/SQLを使わず、SQLでRANK関数を使って順位付けするにはどのようにしたらよろしいでしょうか。
勉強不足だと思い、申し訳なく思います。何卒よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
SET句でRANK関数を使うことはできません。
(使うことができるRDBMSもあるようです)
UPDATE文でRANK関数を使用するときは、少し面倒なことになります。
update tb set 順 = (
select t2.順 from (
select 数値, rank() over (order by 数値 desc) as 順 from tb
) t2
where t2.数値 = tb.数値
);
# 例のテーブル構成では、数値が重複している場合、
# 上記UPDATE文は失敗します。
# 実際には主キーがあるでしょうから
# その点は工夫してください。
# ちなみに下記UPDATE文なら重複していてもOKです。
RANK関数を使用しない方法もあります。
update tb set 順 = (
select count(t2.数値) + 1 from tb t2
where t2.数値 > tb.数値
);
# 例のSQL文と処理結果が合致しません(降順と昇順)。
# とりあえず降順で処理しています。
dda167様 さっそくのご回答ありがとうございました。
update tb set 順 = (
select count(t2.数値) + 1 from tb t2
where t2.数値 > tb.数値
); で処理することができました。
参考になり、感謝しております。
RANK()関数については、私の知識ではすぐには理解できそうもないので、勉強してみます。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 【スプレッドシート】順位のつけ方 2 2022/08/17 13:27
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- Excel(エクセル) エクセル、日々の集計整理方法。(再送です。) 5 2022/10/02 00:19
- 日本語 順位と平均の意味に関する疑問 5 2023/04/15 13:25
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- Excel(エクセル) DATE関数で指定する「日」のセルが関数の場合の対処法 5 2022/09/14 15:46
- Excel(エクセル) Excel2016 行間を詰めたい&同じカテゴリなら上位2つだけを表示したい 5 2022/06/03 12:19
- Visual Basic(VBA) Excel VBA 複数選択したリストボックスからテキストボックスに転記したいです。 3 2023/03/19 18:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sqlで質問です。 aテーブルとb...
-
下記のsqlで取得されるレコード...
-
MSDOS ソート sortf 使用方法
-
oracleのimpdpでORA-39166
-
orace SQL文のエラー(ORA-0092...
-
写真のsql文空白をハイフン表示...
-
sqlで質問です。 Aテーブルは店...
-
SQLの中上級者へのレベルアップ...
-
Object Browser相関タブの見方...
-
SQLについての質問
-
副問合せにLIKE文を使う方法は...
-
PL/SQLでフェッチでNULLの項目...
-
ORCALE SQL 複数のGROUP BY
-
oracleの直接接続のクライアン...
-
ORA-14452について
-
10営業日前の日付を取得したい...
-
複数レコードの完全一致
-
SELECTによる表の変換方法を教...
-
開発対象となるアプリケーショ...
-
質問です。 下記のテーブルとデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
selectの単純繰り返し
-
SELECT文の結果をDEFINEの値と...
-
SQL Server:UNIONで結合した結...
-
RANK関数で順位付けする方法
-
ストアドプロシージャが作成さ...
-
PL/SQLの初歩的な質問その2
-
SQL WHERE文のノットイコール...
-
SQLを完全にマスターする方法は...
-
SQLのIF文
-
oracle シーケンスの欠番を確認...
-
SELECT文発行後の結果をテキス...
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
-
Accessで今日から5日後
-
UPDATEで既存のレコードに文字...
-
truncate tableを使って複数の...
-
timestampのデータはどのように...
-
オラクルのUPDATEで複数テーブル
おすすめ情報