MySQL テーブル結合クエリでグループ化と重複排除を実装する例

MySQL テーブル結合クエリでグループ化と重複排除を実装する例

ビジネスロジック

ミニプログラムのアクティビティページへのリンクを、テキストメッセージでリンクを送信する(チャネルはsms1、sms2、sms3として記録されます)、またはWeChatミニプログラムのQRコードをポスターに掲載する(チャネルはqrcode1、qrcode2、qrcode3として記録されます)など、さまざまなチャネルを通じて公開します。オフラインメンバーは、QRコードをスキャンしてミニプログラムの指定されたアクティビティページに入ることもできます。または、他のメンバーが共有したミニプログラムリンクを介してミニプログラムに入ることもできます(チャネルはshareとして記録されます)。この記事では、これらの異なる入力方法を総称して異なるチャネルと呼び、これがここで言及するチャネル フィールドです。さまざまなチャネルからアクティビティ ページに入ると、ページ訪問記録が生成されます。 page_view テーブルにカウントされます。

会員がミニプログラムの指定アクティビティページに入り、ページ上で一連の操作を実行すると、ポイントやクーポンの獲得など、対応するフィードバックが届きます。このステップは参加と呼ばれます。このデータは activity_record テーブルに記録されます。

さて、オペレーション担当の女性はデータレポートを求めました。イベントに参加した各メンバーは、どの時間にどのチャネルを通じてイベントに参加しましたか?

データテーブル構造

テーブル名メンバーID参加時間
アクティビティ記録会員番号活動参加時間

テーブル名メンバーIDチャネル表示時間
ページビュー会員番号チャネルページ訪問時間

クエリロジック

各メンバーは 1 つのアクティビティにしか参加できないため、アクティビティ中にポイントを獲得したり、クーポンを受け取ったりできるのは 1 回だけなど、各メンバーは最大で 1 つの activity_record レコードのみを生成します。

ただし、page_view テーブルの記録方法は異なります。メンバーは、SMS 経由でリンクを受け取ったり、イベントの QR コードをスキャンしたり、イベント リンクを友人に共有してもらったりした可能性があります。これにより、このメンバーに対して複数のページ アクセス レコードが生成されます (つまり、page_view に複数のデータが生成されます)。

考えてみてください。メンバーがイベントに参加するには、まず特定のチャネルを通じてイベント ページにアクセスする必要があります。つまり、view_time の逆順に並べられた複数の page_view データがある場合、activity_record の join_time よりも小さく最も近い view_time が常に存在し、次の page_view の view_time は activity_record の join_time よりも大きくなります。

SQL スクリプト

c.member_id、c.view_time、.channel を ( から選択
選択
 メンバーID、
 SUBSTRING_INDEX( GROUP_CONCAT( view_time ORDER BY view_time DESC ), ',', 1 ) AS view_time,
 SUBSTRING_INDEX( GROUP_CONCAT( チャネル ORDER BY チャネル DESC ), ',', 1 ) AS チャネル
から
 page_view a LEFT JOIN activity_record b
        a.member_id = b.member_id の場合
        ここで、a.view_time < b.participate_time
グループ化
 メンバーID) c;

スクリプトの説明

  • GROUP_CONCAT: distinctを使用することで、重複する値を除外できます。group_concat( [distinct] 接続するフィールド [ソートフィールドの昇順/降順] [区切り文字 'separator'] )
  • SUBSTRING_INDEX: 文字列インターセプト関数。部分文字列インデックス(str,delim,count)。 str: 処理する文字列; delim: 区切り文字; count: カウント

これで、MySQL テーブル結合クエリのグループ化と重複排除の実装例についての記事は終了です。MySQL テーブル結合クエリのグループ化と重複排除の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLデータベースで外部キー制約を使用する必要があるかどうかの詳細な説明
  • MySQL でテーブル データを削除した後もディスク領域がまだ占有されているのはなぜですか?
  • MySQL インデックス データ構造の詳細な分析
  • MySQL の基本: グループ化関数、集計関数、グループ化クエリの詳細な説明
  • 時間別にグループ化された MySQL クエリ ステートメント
  • MySQL データベース グループ クエリの group by ステートメントの詳細な説明
  • MySQLグループクエリ最適化方法
  • 単語のグループ化シーケンスと複数フィールドのグループ化のための MySQL グループ方法
  • MySQL データの集約とグループ化

<<:  ユーザー中心設計

>>:  preタグを自動的に折り返すためのサンプルコード

推薦する

Vue3+Vantコンポーネントを使用してアプリの検索履歴機能を実装する(サンプルコード)

現在、新しいアプリプロジェクトを開発中です。私にとっても初めてのアプリ開発です。チームで調査と検討を...

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

この記事ではMySQL 8.0.24バージョンのインストールと設定方法を記録し、皆さんと共有しますM...

CentOS7 64でのMySQL5.6.40の詳細なインストール手順

CentOS7 64でのMySQL5.6.40のインストール手順1) 以前にインストールしたMySQ...

Linux コマンドラインからファイルを削除する実用的な方法

rm コマンドrm コマンドは、ファイルを削除するときによく使用されるコマンドです。ファイルまたはデ...

VueのRender関数

目次1. ノード、ツリー、仮想DOM 2. 仮想DOM 2.1 データオブジェクトの詳細2.2 制約...

Linux QT Kit が見つからない、バージョンが空の問題の解決策

現在このような問題が発生しています 私の状況は、QT が動かなくなってしまったため、仮想マシンを再起...

MySQLは外部SQLスクリプトファイルのコマンドを実行します

目次1. SQLコマンドを含むSQLスクリプトファイルを作成する2. SQLスクリプトファイルを実行...

MySQL 最適化戦略 (推奨)

要約すれば: 1. データベースの設計とテーブルの作成時にパフォーマンスを考慮する2. SQLの記述...

パフォーマンスの最適化を教える 52 個の SQL 文

1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...

MySQL の current_timestamp の落とし穴とその解決策を共有する

目次MySQL の current_timestamp の落とし穴エラーを報告する私の解決策mysq...

TCPパフォーマンスチューニングの実装原理とプロセス分析

3ウェイハンドシェイクフェーズクライアントSYNパケットの再試行回数sysctl -w net.ip...

Dockerでプロジェクトを実行する方法

1. プロジェクトwarが保存されているディレクトリを入力しますDockerfileを編集する vi...

Ubuntu16.04にclionをインストールするプロセス全体と手順の詳細な説明

CLion のプロセス全体を最初から説明します。CLion は、JetBrains がリリースした新...

MySQL データベースの手動およびスケジュールされたバックアップ手順

目次手動バックアップタイマーバックアップ手動バックアップ1) cmd コンソール: mysqldum...

Linux でスペースを含むファイルを削除する (ディレクトリではない)

日常業務では、スペースのないファイルに遭遇することがよくあります。これにより、削除操作がはるかに簡単...