MySQL累積計算実装方法の詳しい説明

MySQL累積計算実装方法の詳しい説明

この記事では、MySQL の累積計算の例について説明します。ご参考までに、詳細は以下の通りです。

序文

リクエストを受け、製品側はユーザーの成長曲線を分析したいと考えていました。つまり、一定期間内の1日あたりの総人数のリストです。最近の活動の有効性を評価することをお勧めします。この統計 SQL にはまだ時間がかかりました。 MySQL 統計には依然として特定のスキルが必要です。

需要分析

ユーザーID登録時間
1 2019-09-03
2 2019-09-04
3 2019-09-04
4 2019-09-05
5 2019-09-05
6 2019-09-06

上記の user_info テーブルを見ると、時間ディメンションに基づいて毎日追加された新規ユーザーの数を簡単にカウントできます。 SQL は次のとおりです。

reg_time、count(user_id)、daily_quantity を選択
 user_infoより
reg_time でグループ化 

上記の SQL を使用すると、次のリストを簡単に取得できます。

登録時間1日の数量
2019-09-03 1
2019-09-04 2
2019-09-05 2
2019-09-06 1

しかし、これは私たちが望んでいる結果ではありません。必要なのは、前日の合計と今日の純増加などです。つまり、私たちが望むのは:

登録時間1日の数量
2019-09-03 1
2019-09-04 3
2019-09-05 5
2019-09-06 6

これは少し難しいので、累積計算を行う必要があります。自己リンク、関数、その他の操作を試しましたが、正しい結果が得られませんでした。この時点では、これを処理するために Java コードを使用すれば完璧であるように思えます。初期値を宣言し、ループして累積して結果を計算する必要があるだけです。


 パブリック静的voidメイン(String[] args) {
  int[] arr = {1, 2, 2, 1};

  int[] ints = dailyQuantityArr(0, arr);


  (int i : ints) の場合 {
   System.out.println("i = " + i);
  }


 }


 パブリック静的int[] dailyQuantityArr(intベース、int[] dailyIncrQuantity) {


  int[] 結果 = 新しい int[dailyIncrQuantity.length];
  // 充填を累積する for (int i = 0; i < dailyIncrQuantity.length; i++) {
   ベース += dailyIncrQuantity[i];

   結果[i] = ベース;

  }
  結果を返します。
 }

上記の疑似コードで結果を計算できます。もちろん、可能であれば、この複雑な計算を Java ビジネス コードで実行してみてください。ただし、製品の要件は、ビジュアル データ エンジンで必要な回答を直接取得できる SQL ステートメントを提供できることです。そこで私は上記のコードからインスピレーションを得ました。
mysql にはそのような変数がありますか? 持っている!もちろん。非常によくあるシナリオを覚えています。過去には、シリアル番号を出力する必要があるビジネスがよくありました。Oracle には疑似列 rownum が付属していますが、MySQL にはありません。 MySQL は通常、自動インクリメント変数を宣言してシリアル番号を生成します。例として、user_info テーブルを見てみましょう。

行番号、ユーザーIDとして (@i:=@i+1) を選択 
 user_info から、(@i:=0 を選択) を r として

MySQL ユーザー変数

MySQL 変数は、ローカル変数、ユーザー変数、セッション変数、およびグローバル変数に分けられます。上記のステートメントでは、ユーザー変数を使用します。ユーザー変数はデータベース接続に関連しています。接続で宣言された変数は、ストアド プロシージャで作成された後、データベース インスタンスが切断されるまで消えます。この接続で宣言された変数は別の接続では使用できません。
MySQL のユーザー変数は事前に宣言する必要はなく、使用時に @varname の形式で宣言されます。代入演算は:=または=を通じて実行されます。外部に出力する必要がある場合は、 selectキーワードを使用し、割り当てに:=使用する必要があります。

累積計算にMysqlユーザー変数を使用する

ユーザー変数について学習した後、累積計算を実行する方法がわかりました。user_info テーブル内の毎日の累積合計人数は次のようになります。

 
 a.reg_timeを選択し、
    毎日、
   @i:=@i+a.daily を daily_quantity として 
  から(reg_timeを選択、  
  count(user_id) 日次 
  ユーザーグループから reg_time ) a 、
  (@i:=0 を選択) b

クエリ結果は以下のとおりで、論理要件を満たしています。

登録時間毎日1日の数量
2019-09-03 1 1
2019-09-04 2 3
2019-09-05 2 5
2019-09-06 1 6

しかし、ここにはちょっとした落とし穴があります。実際の業務では、初期化時に@iが0にならない場合があります。例えば、9月4日から9月6日までの合計人数は1人です。 これに特に注意してください。実際の業務開発においては、論理コーディングで実装できる場合は、複雑な操作を論理コーディングで実行することが推奨されます。

要約する

今日は、MySQL ユーザー変数を使用して SQL の累積計算の問題を解決しました。他に何か良いアイデアはありますか?ディスカッションのためにメッセージを残してください。

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

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

以下もご興味があるかもしれません:
  • mysql 時間差計算関数
  • MySQL で誕生日から年齢を計算する複数の方法
  • PHP と MySql で時間差を計算する方法
  • MySQL 文字列長計算実装コード (gb2312+utf8)
  • MySQLデータベースのQPSとTPSの意味と計算方法
  • MySQL の重要なパフォーマンス インデックスの計算と最適化方法の概要
  • mysqlのkey_lenの計算方法についての簡単な説明
  • MySQLクエリプランでken_lenの値を計算する方法
  • MySQLの日付と時刻の間隔計算の分析例
  • MySQLの日付加算と減算関数の詳細な説明
  • mysql トリガーの作成と使用例
  • MySQL トリガーの基本的な使い方(作成、表示、削除など)の詳細な説明

<<:  Tomcat が IDEA のコンソールで文字化けを起こし、IDEA エンコーディングを UTF-8 に設定する方法

>>:  jsを使用してシンプルな虫眼鏡効果を実現します

推薦する

CocosCreatorでクールなレーダーチャートを描く方法

目次序文プレビュー文章グラフィックコンポーネントプロパティ機能グリッドを描く軸角度を計算するスケール...

Vue-CLI3.xはプロジェクトをサーバーに自動的にデプロイします

目次序文1. scp2をインストールする2. テスト/本番環境サーバーのSSHリモートログインアカウ...

jsプロジェクトでの双方向データバインディングの簡単な実装方法

目次序文パブリッシュ・サブスクライバ・パターン結果電話要約する序文双方向データ バインディングとは、...

Centos7 に mysql 8.0.13 (rpm) をインストールする詳細なチュートリアル

yum か rpm か? yum によるインストール方法は非常に便利ですが、公式サイトから MySQ...

nginxのリソースキャッシュ設定の詳細な説明

私はずっとキャッシュについて学びたいと思っていました。結局のところ、キャッシュはフロントエンドのパフ...

Linux サーバーのステータスとパフォーマンスに関連するコマンドの詳細な説明

サーバーステータス分析Linux サーバーの CPU の詳細を表示する#CPU情報を表示[root@...

macOS での MySQL 8.0.17 のインストールと簡単な設定チュートリアル

私が書いた内容が理解できない場合は、インターネット上に理解できるチュートリアルがない可能性があります...

Linux に MySql 5.7.21 をインストールするための詳細な手順

序文Linux で最も広く使用されているデータベースは MySQL です。この記事では、Linux ...

Vueにおけるキーの役割と原理の詳細な説明

目次1. 結論から始めましょう2. キーの役割2.1 例2.2 上記の例を修正する2.3 例を再度修...

web.config (IIS) および .htaccess (Apache) の構成

xml <?xml バージョン="1.0" エンコーディング="...

シェルスクリプト nginx 自動化スクリプト

このスクリプトは、nginxの起動、停止、再起動の操作を満たすことができます。 #!/bin/bas...

Docker のインストールと構成イメージの高速化の実装

目次DockerバージョンCentOS に Docker エンジンをインストールするシステム要件古い...

Dockerでコンテナを作成するときのディレクトリ権限

昨日プロジェクトを書いていた時に、MySQL の派生版である Percona を使う必要があったので...

MySQL 8.0.20 インストール チュートリアル (画像とテキスト付き) (Windows 64 ビット)

1: mysql公式サイトからダウンロードhttps://dev.mysql.com/downlo...