この記事では、MySQL の累積計算の例について説明します。ご参考までに、詳細は以下の通りです。 序文リクエストを受け、製品側はユーザーの成長曲線を分析したいと考えていました。つまり、一定期間内の1日あたりの総人数のリストです。最近の活動の有効性を評価することをお勧めします。この統計 SQL にはまだ時間がかかりました。 MySQL 統計には依然として特定のスキルが必要です。 需要分析
上記の user_info テーブルを見ると、時間ディメンションに基づいて毎日追加された新規ユーザーの数を簡単にカウントできます。 SQL は次のとおりです。 reg_time、count(user_id)、daily_quantity を選択 user_infoより reg_time でグループ化 上記の SQL を使用すると、次のリストを簡単に取得できます。
しかし、これは私たちが望んでいる結果ではありません。必要なのは、前日の合計と今日の純増加などです。つまり、私たちが望むのは:
これは少し難しいので、累積計算を行う必要があります。自己リンク、関数、その他の操作を試しましたが、正しい結果が得られませんでした。この時点では、これを処理するために 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 ステートメントを提供できることです。そこで私は上記のコードからインスピレーションを得ました。 行番号、ユーザーIDとして (@i:=@i+1) を選択 user_info から、(@i:=0 を選択) を r として MySQL ユーザー変数MySQL 変数は、ローカル変数、ユーザー変数、セッション変数、およびグローバル変数に分けられます。上記のステートメントでは、ユーザー変数を使用します。ユーザー変数はデータベース接続に関連しています。接続で宣言された変数は、ストアド プロシージャで作成された後、データベース インスタンスが切断されるまで消えます。この接続で宣言された変数は別の接続では使用できません。 累積計算にMysqlユーザー変数を使用するユーザー変数について学習した後、累積計算を実行する方法がわかりました。user_info テーブル内の毎日の累積合計人数は次のようになります。 a.reg_timeを選択し、 毎日、 @i:=@i+a.daily を daily_quantity として から(reg_timeを選択、 count(user_id) 日次 ユーザーグループから reg_time ) a 、 (@i:=0 を選択) b クエリ結果は以下のとおりで、論理要件を満たしています。
しかし、ここにはちょっとした落とし穴があります。実際の業務では、初期化時に 要約する今日は、MySQL ユーザー変数を使用して SQL の累積計算の問題を解決しました。他に何か良いアイデアはありますか?ディスカッションのためにメッセージを残してください。 MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL トランザクション操作スキル」、「MySQL ストアド プロシージャ スキル」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: Tomcat が IDEA のコンソールで文字化けを起こし、IDEA エンコーディングを UTF-8 に設定する方法
目次1. テスト環境1.1 CentOS 7をインストールする1.2 Docker CE 19.03...
リストスタイルのプロパティHTMLには、順序なしリストと順序ありリストの2種類のリストがあります。仕...
MySQL では、1 つの列に複数のインデックスを作成できます。意図的であるかどうかにかかわらず、M...
導入面接官がこんな質問をしたことはありませんか?データベースをどのように最適化しますか?では、この質...
1. 問題の説明Docker コンテナにインストールされているストレージが終了状態になっているため、...
解決親要素に position:relative を追加します。子要素に position:abso...
ダイアログをクロージャで使用し、右上隅の向こう側に閉じるボタンがあるダイアログを描画しました。ボタン...
以前にも紹介しました: docker (一般的なアプリケーションのデプロイ): docker dep...
CSS デフォルトスタイルをクリア通常の明確なデフォルト スタイル: *{ マージン:0; パディン...
[LeetCode] 175.2つのテーブルを結合する表: 人物+-------------+--...
ページ内のテーブルの幅を width="600px" に設定した後も、幅が固定さ...
イメージを作成する方法は 3 つあります。既存のイメージに基づいてコンテナを作成する、ローカル テン...
Web ページを作成するときに、特定のフォントを使用したい場合は、 @font-faceを介して参照...
目次1. スロットを使用してコンポーネントを理解しやすくし、より強力にする2. Vuexストアを正し...
MySQLのスイッチングデータ保存ディレクトリの実装方法今日、仕事中に、mysql が保存されている...