Mysql8.0はソート問題を解決するためにウィンドウ関数を使用する

Mysql8.0はソート問題を解決するためにウィンドウ関数を使用する

MySQL ウィンドウ関数の紹介

MySQL は MySQL 8.0 以降、ウィンドウ関数をサポートしています。この機能は、ほとんどの商用データベースと一部のオープンソース データベースで長い間サポートされており、一部は分析関数とも呼ばれています。

ウィンドウとは何ですか?

ウィンドウの概念は非常に重要です。これはレコードのセットとして理解できます。ウィンドウ関数は、特定の条件を満たすレコードのセットに対して実行される特別な関数です。各レコードについて、このウィンドウ内で関数を実行する必要があります。一部の関数では、ウィンドウ サイズはレコードに応じて固定されており、静的ウィンドウです。逆に、一部の関数では、異なるレコードが異なるウィンドウに対応します。この動的に変化するウィンドウは、スライディング ウィンドウと呼ばれます。

ウィンドウ関数と通常の集計関数も混同されやすいです。両者の違いは次のとおりです。

集計関数は複数のレコードを 1 つに集計しますが、ウィンドウ関数は実行する必要があるレコードの数に関係なく、各レコードに対して実行されます。

集計関数はウィンドウ関数でも使用できます。これについては後で例を挙げて説明します。

1. MySQL 5.0

たとえば、営業担当者の売上を計算し、結果を高いものから低いものの順に並べ替え、クエリ結果に売上ランキングを含める必要があります。


これは製品注文テーブルのデータの一部です。

1. 営業担当者の売上を計算し、結果を高い順に並べ替える

この部分では、group by を直接使用して営業スタッフをグループ化し、集計関数 sum を使用して売上を合計し、order by を使用して売上結果を並べ替えることができます。声明は次のとおりです。

SELECT sales_name, sum( profit ) FROM spm_order GROUP BY sales_name ORDER BY sum( profit ) DESC 


クエリ結果

2. クエリ結果に売上ランキングを含めるかどうか。

MySQL 5.0 では、新しい列として +1 を自動的に追加できるように、ソートの自動増分変数を定義する必要があります。声明は次のとおりです。

@ランクを 0 に設定します。
選択
A.*、
@rank := @rank + 1 ランク番号
から
( SELECT sales_name, sum( profit ) FROM spm_order GROUP BY sales_name ORDER BY sum( profit ) DESC ) A

ここでの := は代入を意味し、ここでの A はサブクエリに別名を付けて簡単に呼び出せるようにするためのものです。

結果は次のとおりです。


ここに画像の説明を挿入

2. MySQL 8.0

この問題に対して、MySQL 8.0 では複雑な問題を簡素化するために呼び出すことができる特別なウィンドウ関数があります。

声明は次のとおりです。

選択
営業名、
合計(売上)、
row_number ( ) over ( ORDER BY sum( sales ) DESC ) AS 'rank'
から
注文
グループ化
セールス名

結果:


ここに画像の説明を挿入

ここでは[ row_number() over () ]を使用し、over()内にソートしたい内容を直接記述します。
職場のほとんどの企業ではバージョン 5.0 を使用しているので、それについて詳しく学んでください。

要約する

上記は、Mysql8.0 のウィンドウ関数を使用してソート問題を解決する方法について紹介したものです。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • MySQL 8.0 ウィンドウ関数の紹介と概要
  • 効率的なページングクエリを実現するためのSQLウィンドウ関数のケース分析
  • MySQLウィンドウ関数の具体的な使用法
  • SQLウィンドウ関数について簡単に学ぶ

<<:  Linux で実行可能ファイルを実行するときに「そのようなファイルまたはディレクトリはありません」というプロンプトが表示される場合の解決策

>>:  JavaScript offsetParent のケーススタディ

推薦する

2017 最新バージョンの Windows インストール MySQL チュートリアル

1. まず、MySQL の公式サイトから最新バージョンの MySQL をダウンロードします。リンクを...

Vueコンポーネント通信方法事例まとめ

目次1. 親コンポーネントが子コンポーネントに値を渡す(props) 2. サブコンポーネントは親コ...

MySQL 時間統計方法の概要

データベースの統計を行う場合、多くの場合、年、月、日に基づいてデータを収集し、echart を使用し...

MySQLのINサブクエリによってインデックスが使用できなくなる問題を解決する

今日は、MySQL IN サブクエリの最適化に関するケーススタディを見ました。最初は少し懐疑的でした...

MySQLリモートアクセスの設定方法をステップバイステップで説明します

序文MySQL データベースを使用する場合、クライアントはデータベース サーバーにリクエストを送信す...

Docker に nginx をインストールし、https 経由でアクセスを構成する方法

1. 最新のnginx dockerイメージをダウンロードする $ docker pull ngin...

シンプルなページング効果を実現するjQuery+Ajax

この記事では、ページング効果を実現するためのjquery+Ajaxの具体的なコードを参考までに紹介し...

MySQL にテキストと画像を保存する方法

Oracle の大きなテキスト データ型 Clob 長いテキスト型 (MySQL ではサポートされて...

MySql Installer 8.0.18 画像とテキストによるビジュアル インストール チュートリアル

目次1. MySQL 8.0.18のインストール2. 環境変数を設定する3. 接続テスト1. MyS...

ユーザー中心設計

最近、デジタル デザイン コミュニティで「誰が何を担当するのか」という明らかな混乱についてよく質問さ...

Vue マウスホイールスクロール切り替えルーティング効果を実装する方法

ルート ルーティング コンポーネント (アプリの下のルート ルーティング コンポーネント。子コンポー...

MySQL のインデックス有効条件とインデックス無効条件の結合

目次1. ジョイントインデックスの故障の条件2. インデックス失敗の条件1. ジョイントインデックス...

画面なしで無線ネットワークに接続しているときに Raspberry Pi の IP アドレスを見つける方法

あなたがlinuxerだと仮定すると、 windowserだとは想定しません。Windows ユーザ...

HTML印刷関連の操作と実装の詳細な説明

原則的にはwindow.print()メソッドを呼び出すことですが、このメソッドは現在のページ全体を...

HTMLボタンを中央に配置する方法

HTML ボタン自体を中央に配置するにはどうすればよいでしょうか? このアイデアは簡単に見つかります...