SQL ROW_NUMBER() および OVER() メソッドのケーススタディ

SQL ROW_NUMBER() および OVER() メソッドのケーススタディ

構文フォーマット: row_number() over(partition by grouping column order by sorting column desc)

row_number() over() グループ化ソート関数:

row_number() over() 関数を使用する場合、over() でのグループ化と並べ替えは、where、group by、order by よりも後に実行されます。

例1:

表データ:

テーブルTEST_ROW_NUMBER_OVER(を作成
       id varchar(10) が null ではない、
       名前 varchar(10) null,
       年齢 varchar(10) null,
       給与 int null
);
TEST_ROW_NUMBER_OVER t から * を選択します。
 
TEST_ROW_NUMBER_OVER(id,name,age,salary) に値(1,'a',10,8000) を挿入します。
TEST_ROW_NUMBER_OVER(id,name,age,salary) に値(1,'a2',11,6500) を挿入します。
TEST_ROW_NUMBER_OVER(id,name,age,salary) に値(2,'b',12,13000) を挿入します。
TEST_ROW_NUMBER_OVER(id,name,age,salary) に値(2,'b2',13,4500) を挿入します。
TEST_ROW_NUMBER_OVER(id,name,age,salary) に値(3,'c',14,3000) を挿入します。
TEST_ROW_NUMBER_OVER(id,name,age,salary) に値(3,'c2',15,20000) を挿入します。
TEST_ROW_NUMBER_OVER(id,name,age,salary) に値(4,'d',16,30000) を挿入します。
TEST_ROW_NUMBER_OVER(id,name,age,salary) に値(5,'d2',17,1800) を挿入します。

一度だけ並べ替え: クエリ結果を並べ替えます (グループ化なし)

id、名前、年齢、給与、行番号()を選択し、給与降順で並べ替えます。rn
TEST_ROW_NUMBER_OVER から t

結果:

さらに並べ替え: IDグループで並べ替え

id、名前、年齢、給与、行番号()を選択し、(idでパーティション分割し、給与の降順で並べ替え)ランク付けします。
TEST_ROW_NUMBER_OVER から t

結果:

再度ソート: 各グループ内のシーケンス番号1のデータを検索します

select * from(select id,name,age,salary,row_number()over(partition by id order by salary desc) rank
TEST_ROW_NUMBER_OVER から t)
ランク <2

結果:

13歳から16歳までのデータを検索するには、給与順に並べ替えます

id、名前、年齢、給与、行番号()を選択し、給与降順で並べ替え、順位付けします。
TEST_ROW_NUMBER_OVER t から、年齢が '13' から '16' の間

結果: 結果のランク番号は、実際にはover(order by salary desc)がwhere age between andの後に実行されることを示しています。

例2:

1. row_number() 関数を使用して番号を付ける。

QT_Customer から email、customerID、ROW_NUMBER() を (order by psd) の行として選択します。

原則: まず psd で並べ替え、並べ替えた後に各データに番号を付けます。

2. 注文を価格の昇順に並べ替え、各レコードを並べ替えます。コードは次のとおりです。

OP_Order から行として DID、customerID、totalPrice、ROW_NUMBER() を (totalPrice で順序付け) 選択します。

3. 各世帯からの注文をすべて数え、各顧客の注文金額に応じて昇順で並べ替え、各顧客の注文に番号を付けます。この方法で、各顧客がいくつ注文したかを知ることができます。

ROW_NUMBER() を選択 (顧客ID でパーティション、合計価格で順序付け)
 OP_Order からの行、顧客 ID、合計価格、DID として

4. 各顧客が最近行った注文の数を数えます。

タブ付き  
(  
ROW_NUMBER() を選択 (顧客ID でパーティション、合計価格で順序付け)
 OP_Order からの行、顧客 ID、合計価格、DID として  
 )  
タブから「注文数」と顧客IDとしてMAX(行)を選択します 
顧客IDでグループ化

5. 各顧客のすべての注文の中で最も小さい購入金額を数え、また、この順序で顧客が行った購入回数も数えます。

アイデア: この操作を実行するには一時テーブルを使用します。

1. まず顧客ごとにグループ化し、次に顧客が注文した時間で並べ替えて番号を付けます。

2. 次に、サブクエリを使用して、各顧客の購入の最小価格を調べます。

3. 各顧客の最低価格に基づいて対応するレコードを検索します。

    タブ付き  
     (  
    ROW_NUMBER() を選択 (顧客 ID によるパーティション、insDT による順序) 
OP_Order からの行、顧客 ID、合計価格、DID として  
    )  
     タブから*を選択  
    totalPriceが   
    (  
    顧客ID別にタブグループからMIN(totalPrice)を選択します。  
     )

6. 顧客による最初の注文を除外します。

アイデア。顧客の最初の注文レコードを照会するには、rows=1 を使用します。

    タブ付き  
    (  
    ROW_NUMBER() を (partition by customerID order by insDT) として行として選択し、* OP_Order から  
    )  
    行数が 1 のタブから * を選択します 
    OP_Orderから*を選択

7. 注意: over などのウィンドウ関数を使用する場合、over でのグループ化と並べ替えは、「where、group by、order by」の実行よりも後に実行されます。

    選択   
    ROW_NUMBER() over(partition by customerID order by insDT) 行として、  
    顧客ID、合計価格、DID  
    OP_Order から insDT>'2011-07-22'

これで、sql ROW_NUMBER() および OVER() メソッドの詳細なケース分析に関するこの記事は終了です。sql ROW_NUMBER() および OVER() メソッドの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MYSQL row_number() および over() 関数の詳細な使用方法
  • PostgreSQL ROW_NUMBER() OVER() の使用方法の説明
  • postgreSQL での row_number() と distinct の使用
  • Postgresql の rank() over、dense_rank()、row_number() の使用法の違い
  • MySQLにおけるrow_numberの実装プロセス
  • SQL Server の row_number 関数の一般的な使用例の詳細
  • 4 つの主要な SQL ランキング関数 ROW_NUMBER、RANK、DENSE_RANK、NTILE の使用方法の紹介

<<:  CentOS 8.4 での Docker パッケージのオフラインインストールの問題について

>>:  CSS3アニメーション属性に基づくWeChatタップアニメーション効果の実装

推薦する

HTMLタグのフルネームと機能の紹介

アルファベット順DTD: このタグが許可される XHTML 1.0 DTD を示します。 S=厳密、...

PC/Pad/Phoneデバイスに自動的に適応するCSSウェブページレスポンシブレイアウト

序文最近は、PC、iPad、携帯電話、スマートウォッチ、スマートテレビなど、さまざまなデバイスが存在...

CSS における要素の表示モード

CSS では、要素タグは、要素の表示モードの違いに応じて、インラインレベル要素とブロックレベル要素の...

InnoDB ロック (レコード、ギャップ、Next-Key ロック) の詳細な説明

レコード ロックは、単一のインデックス レコードをロックします。レコード ロックは常にインデックスを...

Vue コンポーネントの構成構造とコンポーネント登録の詳細

目次1. コンポーネントの構成2. コンポーネント名2.1 コンポーネントの命名3. グローバル登録...

VMware Workstation 14 Pro(仮想マシン)にシステムをインストールする方法の詳細な説明

この記事では、VMware Workstation 14 Pro (仮想マシン) にシステムをインス...

Vue ページでよりエレガントに画像を紹介する方法

目次エラーのデモンストレーション計算により画像が変わらない場合は直接インポートするCSS変数による画...

Dockerでイメージをプルするための手順を完了する

1. Docker pullはイメージをプルします$ docker pull {IMAGE_NAME...

1つの記事でJSONPの原理と応用を理解する

目次JSONPとはJSONP 原則JSONP実装1. Ajaxでクロスドメインリクエストが行われると...

MySQL Community Server 圧縮パッケージのインストールと設定方法

今日は、MySQL をインストールしたかったので、公式 Web サイトにアクセスして、MySQL の...

Centos7 に yum 経由で MySQL をインストールする方法

1. MySQLがインストールされているかどうかを確認する yum インストール済みリスト | gr...

uniapp 要素ノードスタイルの動的変更の詳細な説明

目次1. スタイル属性をバインドして変更するhtml:対応するjs:達成された効果:次に、refを使...

この記事では、イベント委任を使用してJavaScriptメッセージボード機能を実装する方法について説明します。

イベント委任を使用してメッセージ ボード機能を実装します。 <!DOCTYPE html>...

ウェブページ制作時のコードコメントの書き方

<br />私の仕事で使用しているアノテーションの書き方の基準をまとめました。技術的な内...

Linux ファイル管理コマンド例の分析 [表示、閲覧、統計など]

この記事では、Linux ファイル管理コマンドについて例を挙げて説明します。ご参考までに、詳細は以下...