MYSQL row_number() および over() 関数の詳細な使用方法

MYSQL 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'

MYSQL row_number() および over() 関数の詳しい使い方については、これで終わりです。MYSQL row_number() および over() 関数の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 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 の使用方法の紹介
  • SQL ROW_NUMBER() および OVER() メソッドのケーススタディ

<<:  Nginx バージョンのスムーズなアップグレードソリューションの詳細説明

>>:  JS でオブジェクトを作成する 4 つの方法

推薦する

Linuxでmysqlの定期的なコールドバックアップを実装するためにmysqldump+expect+crontabを使用するアイデアの詳細な説明

目次1. 遭遇した問題2. アイデア3. コード1. 遭遇した問題私たちは皆、mysqldump を...

Rx レスポンシブプログラミングについての簡単な説明

目次1. 観察可能2. 高階関数3. エクスプレスボックスモデル3.1. エクスプレスボックスモデル...

MySQL のユニークインデックスと通常のインデックスのどちらを選択すればよいでしょうか?

ユーザー テーブルを設計するときに、各人の ID 番号が一意であり、検索する必要があるシナリオを想像...

NavicatでMySqlスケジュールタスクを作成する方法の詳細な説明

Navicat で MySql スケジュールタスクを作成する詳細な説明イベントは、MySQL が特定...

CSS3でよく使われるスタイルの詳しい解説[基本的なテキストとフォントのスタイル]

概要: Web ページをより美しく見せるために、ここでは CSS3 でよく使用されるスタイルをいくつ...

MySQL の時間タイプとモードの詳細

目次1. MySQL の時刻型2. タイムゾーンを確認する3. 不正な時間値4. 厳密モード5. 事...

Redis イメージの Docker インストールと設定手順

目次序文環境インストールMySQLコンテナを作成して起動する落とし穴を避けるための注意MySQLコン...

Centos8 で Docker を使用して Django プロジェクトをデプロイする詳細なチュートリアル

導入この記事では、django + uwsgi + nginx デプロイメントを使用して、Docke...

Vueバックグラウンド管理に多言語機能を追加する例

目次1.まず、main.jsページを設定します2. 対応するパスの下で言語パックを構成します。ここに...

HTML ページをスクロールするときに一部のコンテンツを固定位置に固定する方法

この記事では主に、レイアウトに役立つ、HTML ページ内の一部のコンテンツを固定してスクロール時にス...

テキストエリアの disabled 属性と readonly 属性の具体的な使用法

障害者の定義と使用法disabled 属性はブール属性です。 disabled 属性は、テキスト領域...

VMware12 インストール centOS8 構成グラフィック チュートリアルの詳細説明 (vm 仮想マシン インストール centos8 チュートリアル)

数日前に CentOS8 がリリースされました。8 の最初のバージョンですが、今日は VM12 に ...

JSはショッピングカート内の商品の合計金額の計算を実現します

JSはショッピングカート内の商品の合計金額を計算して参考とします。具体的な内容は以下のとおりです。質...

Javascript の基礎: 演算子とフロー制御の詳細な説明

目次1. オペレーター1.1 算術演算子1.2 インクリメント演算子とデクリメント演算子1.3 比較...

Nodejs と Socket.IO を組み合わせて Websocket の即時通信を実現

目次WebSocketを使用する理由ソケット.ioオープンソースプロジェクト効果プレビューアプリイン...