MySQL スライディング集計/年初来集計の原理と使用例の分析

MySQL スライディング集計/年初来集計の原理と使用例の分析

この記事では、例を使用して、MySQL スライディング集計/年初来集計の原理と使用方法を説明します。ご参考までに、詳細は以下の通りです。

スライディング集計は、スライディング ウィンドウ範囲内のデータを順番に集計する操作です。累積集計とは異なり、スライディング集計では開始位置から現在の位置までのデータはカウントされません。

ここでは、過去 3 か月間の従業員の月間注文数をカウントする例を取り上げて、スライディング集計を紹介します。

スライディング集約ソリューションと累積集約ソリューションの主な違いは、結合条件が異なることにあります。スライディング集計条件は b.ordermonth <= a.ordermonth ではなくなりましたが、b.ordermonth は過去 3 か月間の月数より大きく、現在の月より小さくなります。したがって、スライディング集計ソリューションのSQL文は次のようになります。

選択
 a.empid、
 DATE_FORMAT(a.ordermonth, '%Y-%m') AS ordermonth,
 今月のAS数量、
 SUM(b.qty) AS 合計、
 CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avg
empordersから
INNER JOIN emporders b
 オン a.empid=b.empid
 AND b.ordermonth > DATE_ADD(a.ordermonth, 間隔 -3 か月)
 かつ、b.ordermonth <= a.ordermonth
DATE_FORMAT(a.ordermonth,'%Y')='2015' かつ DATE_FORMAT(b.ordermonth,'%Y')='2015' の場合
GROUP BY a.empid、DATE_FORMAT(a.ordermonth、'%Y-%m')、a.qty
ORDER BY a.empid,a.ordermonth

結果は以下のとおりです

このソリューションは、3 か月間のスライディング集計を返しますが、各ユーザーには過去 2 か月と 3 か月未満の集計が含まれます。 3か月以上前の集計のみを返し、3か月未満の集計は返さない場合は、HAVINGフィルターを使用してフィルタリングできます。フィルタリング条件は、MIN(b.ordermonth)=DATE_ADD(a.ordermonth, INTERVAL -2 MONTH)です。たとえば、

選択
 a.empid、
 a.ordermonth AS ordermonth、
 今月のAS数量、
 SUM(b.qty) AS 合計、
 CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avg
empordersから
INNER JOIN emporders b
 オン a.empid=b.empid
 AND b.ordermonth > DATE_ADD(a.ordermonth, 間隔 -3 か月)
 かつ、b.ordermonth <= a.ordermonth
DATE_FORMAT(a.ordermonth,'%Y')='2015' かつ DATE_FORMAT(b.ordermonth,'%Y')='2015' かつ a.empid=1 の場合
GROUP BY a.empid、DATE_FORMAT(a.ordermonth、'%Y-%m')、a.qty
HAVING MIN(b.ordermonth)=DATE_ADD(a.ordermonth, INTERVAL-2 MONTH)
ORDER BY a.empid,a.ordermonth

結果は以下のとおりです

年初来集計は、現在の年の集計のみがカウントされることを除いて、スライディング集計に似ています。唯一の違いは、下限がどこから始まるかです。年初来問題では下限は年の最初の日ですが、スライディング集計の下限は N か月の最初の日です。したがって、年初来の問題の解決法は以下に示され、得られた結果は

選択
 a.empid、
 DATE_FORMAT(a.ordermonth, '%Y-%m') AS ordermonth,
 今月のAS数量、
 SUM(b.qty) AS 合計、
 CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avg
empordersから
INNER JOIN emporders b
  オン a.empid=b.empid
  かつ、b.ordermonth >= DATE_FORMAT(a.ordermonth, '%Y-01-01')
  かつ、b.ordermonth <= a.ordermonth
  AND DATE_FORMAT(b.ordermonth,'%Y')='2015'
GROUP BY a.empid、a.ordermonth、a.qty
ORDER BY a.empid,a.ordermonth

結果は以下のとおりです

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL の集計関数 count の使用法とパフォーマンスの最適化テクニック
  • MySQLでよく使われる集計関数の詳細な説明
  • MySql の集計関数に条件式を追加する方法
  • php+mysql オープンソース XNA 集計プログラムがダウンロード用にリリースされました
  • Mysql は非集計列を選択できません
  • MySQL クエリのソートとクエリ集計関数の使用法の分析
  • MySQL の単一テーブル クエリ操作例の詳細な説明 [構文、制約、グループ化、集計、フィルタリング、並べ替えなど]
  • MySQL 継続的集計の原理と使用法の分析
  • MySQLの累積集計原理と使用例の分析

<<:  Linuxファイル削除後にスペースが解放されない問題の詳しい説明

>>:  JavaScript マウスイベントのケーススタディ

推薦する

MySQL の無効な左結合の問題を解決する方法とその使用上の注意

MySQLの左結合が無効であり、その使用方法今日SQLを書いていたとき、左結合を使用すると左のテーブ...

MySQL で datetime 型のデフォルト値を設定する方法

Navicat クライアントを通じてデフォルトの日時値を変更する際に問題が発生しました。データベース...

MySQL 5.7.21 winx64 グリーンバージョンのインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 5.7.21のインストールと設定方法を記録しています。具体的な内容は以下のと...

CSS3 のディスプレイのグリッドレイアウトとフレックスレイアウトの詳細な説明

Gird レイアウトは Flex レイアウトといくつかの類似点があり、どちらもコンテナーの内部項目を...

Docker-compose インストール db2 データベース操作

db2 データベースをホストマシンに直接インストールするのは面倒で、ユーザーや権限を巻き込むのも不便...

フロントエンドタスク構築のための強力なツールであるGulp.jsの使い方を詳しく説明します

目次概要Gulp.jsをインストールするGulp.jsを使用してプロジェクトを作成するgulpfil...

vueプロジェクトのマルチ環境設定(.env)の実装

目次マルチ環境構成とは何ですか? また、なぜそれが必要なのですか? .env ファイルはどこで設定さ...

Centos7 で MySQL マスター スレーブ サーバーを構築する方法 (グラフィック チュートリアル)

この記事では主に CentOS 上で MySQL マスタースレーブサーバーを構築する方法を紹介します...

js を使用してシンプルなスイッチ ライト コードを実装する

体の部位: <button>ライトのオン/オフを切り替える</button>...

HTML テーブルのオーバーフローの解決方法

テーブルが広い場合は、あふれてしまう可能性があります。たとえば、左と右の 2 つの div がありま...

CSS ですべての子要素を選択し、スタイルを追加する方法

方法:実際のプロジェクトを例に挙げてみましょう。 .lk-ツールバー{ .el-入力{ 幅: 169...

MySQL v5.7.18 解凍バージョンのインストール詳細チュートリアル

MySQLをダウンロード5.1.1.1 より前のバージョン私のコンピュータは64ビットなので、Win...

CentOS7 で MySQL のスケジュールされた自動バックアップを実装する方法

実稼働環境で起こる最も嬉しいことは、シナリオによっては、更新または削除時にパラメータを無視せざるを得...

MySQL スロークエリログの基本的な使い方チュートリアル

スロークエリログ関連のパラメータMySQL スロー クエリ関連のパラメータの説明: slow_que...

ウェブサイトのユーザビリティとコンバージョン率を向上させる 25 のツール

ウェブサイトの場合、ユーザビリティとは、ユーザーが必要な情報を効果的に見つけたり、タスクを完了したり...