MySQLの日次統計レポートでは、その日にデータがない場合には0が入力されます。

MySQLの日次統計レポートでは、その日にデータがない場合には0が入力されます。

1. 問題の再現:

各日の合計数を日ごとにカウントします。データのない日がある場合、グループ化によってそれらの日が無視されます。それらの日を 0 で埋めるにはどうすればよいでしょうか?下の図に示すように、10-3 から 10-10 までの 7 日間のデータがカウントされますが、そのうち 8 日目と 10 日目のデータのみがあります。このように、返されるデータは 2 つだけであり、レポートの統計要件を満たしていません。 0で埋められる値はないと予想されます

2. 考え方を変える:

連続する日のセットを左テーブルとして使用し、クエリするデータを左結合して、最後にグループ化します。以下に示すように、連続する日テーブル t1 をビジネス データ t2 で左結合し、t1.day でグループ化します。

選択
 t1.`日`、
 COUNT(t2.user_id) 支払い番号
から
 (選択
 @cdate := DATE_ADD(@cdate, 間隔 - 1 日) 日
 から
 (選択
  @cdate := DATE_ADD('20171219', 間隔 + 1 日)
 から
  注文)t0
 制限7) t1
 左結合
 (選択
  DATE(a.create_time) 曜日、
  ユーザーID
 から
  支払い_支払い
  ディーラーストアに参加する b
  ON a.order_no = b.order_no
 DATE(create_time) <= '20171219' の場合
  AND DATE(create_time) > DATE_SUB('20171219', INTERVAL 7 DAY)
  ) t2
 t2日 = t1日
GROUP BY t1.`day`;

2.1 連続日数表

選択
 @cdate := DATE_ADD(@cdate, 間隔 - 1 日) 日
 から
 (選択
  @cdate := DATE_ADD('20171219', 間隔 + 1 日)
 から
  注文)t0
 制限7

実行結果は次のとおりです。

SQL分析:

1. @cdate := 是定義名為cdate的變量并賦值(select 后面必須用:=)

2. .@cdate := DATE_ADD('20171219', INTERVAL + 1 DAY)渡された日付 '20171219' に 1 日を追加します。

3. SELECT @cdate := DATE_ADD('20171219', INTERVAL + 1 DAY) FROM `order`し、10 件を超えるレコードがあるテーブルを検索します。実行結果は次のとおりです。

4. .@cdate := DATE_ADD(@cdate, INTERVAL - 1 DAY) DAY定義されたcdate変数の日数を1減らします(自己減分)

5. LIMIT 7 レコード数を制限します。これで完了です。指定した日付の 7 日前のレコードを取得しました。

2.2 左結合してからグループ化する

left join group by t1.day

つまり、左表に関連付けられた業務データに従って、左表の日付に従ってデータをグループ化し、つまり指定された 7 日間のデータに分割します。レコードがある場合はエントリ数がカウントされ、レコードがない場合は 0 になります。

最終実行結果:

要約する

上記は、その日にデータがない場合、毎日の統計レポートに従ってMySQLに0を入力するために紹介した実装コードです。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQL 統計クエリ実装コード
  • MYSQL の SUM フィールドの条件付き統計を計算するために IF 関数 (case) を使用する際の問題
  • MySQLを使用して列内の同一値の数を照会する方法
  • MySQLを使用して列内の異なる値の数をカウントする例
  • 単一の選択ステートメントでMySQLクエリ統計を実装します
  • 10分ごとに統計をグループ化するMYSQL実装方法
  • MySQL におけるいくつかのデータ統計クエリの基本的な使用方法のチュートリアル
  • MySQL 時間統計方法の概要
  • mysqlは指定された期間内の統計データを取得します
  • MySQL 統計関数 GROUP_CONCAT の使用における落とし穴の分析
  • MySQL スライディングオーダー問題の原理と解決の例分析

<<:  CentOS 6 または CentOS 7 でディスク領域をクリアする方法

>>:  Dockerイメージをプルしてバージョンを確認する方法

推薦する

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

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

require loaderの実装原理の深い理解

序文Node は新しいプログラミング言語ではなく、JavaScript のランタイムに過ぎないとよく...

mysql5.7.14 解凍版インストールと設定方法 グラフィックチュートリアル (win10)

Win10はmysql5.7の解凍版をインストールします。参考までに、具体的な内容は次のとおりです...

ECMAscript の新機能の紹介

目次1. 関数パラメータのデフォルト値1.1 関数パラメータのデフォルト値の指定1.2 分離割り当て...

TypeScriptはvscodeを使用してコードのコンパイルプロセスを監視します

インストールtsコマンドをグローバルにインストールする npm install -g typescr...

MySQL はどのようにしてマスターとスレーブの同期を実現するのでしょうか?

マスタースレーブ同期 (マスタースレーブレプリケーションとも呼ばれる) は、マスタースレーブデータの...

Docker を使用して開発環境を構築する方法 (Windows および Mac)

目次1. Dockerを使用する利点2. Dockerをインストールする1) LinuxにDocke...

HTMLのimgタグで画像の中心部分だけを表示する方法(3つの方法)

HTML の img タグで画像の中心を表示する方法は、現在 3 つあります。ここで記録しておきま...

タイムライン効果を実現するCSS3

最近、コンピューターの電源を入れたところ、Geek Academy が新規ユーザーに 1 か月の無料...

JavaScript によるデータ視覚化: ECharts マップの作成

目次概要予防1. 使用方法2. 実装手順予備実装コード効果: Geo共通設定上記の構成を追加した後の...

awk でのループの使用

同じコマンドを複数回実行するさまざまな種類のループについて学習しましょう。 awk スクリプトには、...

MYSQL(電話番号、IDカード)データ非感応化の実装

1. データ感度低下の説明日常の開発ニーズでは、データの感度低下が頻繁に発生します。たとえば、ID ...

mysqlは2つ以上のフィールドがNULLであるレコードを見つける問題を解決します

コアコード /*-------------------------------- 2つ以上のフィール...

JavaScript クロージャの詳細

目次1. クロージャとは何ですか? 2. 閉鎖の役割序文: JavaScript部分ではクロージャが...

クラウドネイティブテクノロジーKubernetesスケジューリングユニットポッドの使用の詳細な説明

k8s の最小のスケジューリング単位 --- pod前回の記事では、k8s が解決できる問題を簡単に...