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 のケーススタディ

推薦する

Linux で unzip コマンドを使用して複数のファイルを解凍する方法

Linuxにunzipコマンドがない問題の解決策unzipコマンドを使用して.zipファイルを解凍す...

JavaScript の 3 つの BOM オブジェクト

目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...

CSS3 box-shadow プロパティの詳細な例

CSS3 - 影の追加(ボックスシャドウの使用) CSS3 - div またはテキストに影を追加する...

Vueナンバープレート検索コンポーネントの使い方の詳しい説明

参考までに、シンプルなナンバープレート入力コンポーネント(vue)です。具体的な内容は次のとおりです...

一般的なイベントを処理するための JavaScript の使用に関する詳細な説明

目次1. フォームイベント2. マウスイベント3. キーボードイベント4. 共通イベントメソッド(ウ...

mysql 8.0.19 winx64.zip インストール チュートリアル

この記事は参考までにmysql 8.0.19 winx64.zipのインストールチュートリアルを記録...

CocosCreatorのホットアップデートの包括的な説明

目次序文ホットチェンジとはCocos Hot アップデートの概要マニフェストプロジェクトリソースとゲ...

CSS を使用して fullpage.js のフルスクリーン スクロール効果を実装するサンプル コード

最近 CSS を勉強していたとき、 2 つの CSS プロパティだけを使用して全画面スクロール効果を...

Dockerのインストール、イメージの作成、NodeJSプログラムの読み込みと実行の詳細なプロセス

システム環境: Windows 7 1. DockerをインストールするDocker公式サイトからd...

MacでのMySQL5.7.22のインストール手順

1. インストールパッケージを使用してMySQLをインストールします(オンラインダウンロードは遅すぎ...

Windows での MySQL の詳細なインストール手順と基本的な使用方法

目次1. MySQLをダウンロードする2. MySQLをインストールする3. MySQL の基本的な...

MySQL データベースのパフォーマンス最適化の概要

目次なぜ最適化するのですか? ?どこから始めますか? ?解決策は何ですか? ? ?どうやって選ぶ? ...

SQL 文を使用してデータを収集する場合の sum 関数と count 関数の if 判定条件の使用法の説明

まず、例を挙げてみましょう(読みたくない場合は、以下の要約だけ読んでください)。 order_typ...

html-webpack-plugin の使用方法の詳細な説明

最近、React プロジェクトで初めてhtml-webapck-pluginプラグインを使用しました...

スタートアップ企業が丹念に作り上げた優れたウェブデザイン17選

スタートアップ企業は、型破りな仕事のやり方、ユニークなビジネスモデル、特徴的な製品やサービス、パーソ...