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タグを自動的に折り返すためのサンプルコード

推薦する

JSはGMTとUTCのタイムゾーンを完全に理解しています

目次序文1. GMT GMTとはGMTの歴史2. UTC UTCとはUTC は次の 2 つの部分で構...

ウェブページコンテンツの閲覧設計手法に関する議論

<br />コンテンツ ページの記事の場合、記事が長すぎる場合やカテゴリ (ランキング)...

完全なMySQL学習ノート

目次MyISAM と InnoDBパフォーマンスの低下と SQL の速度低下の理由: MySQL 実...

Vueナンバープレート入力コンポーネントの使い方の詳しい説明

参考までに、シンプルなナンバープレート入力コンポーネント(vue)です。具体的な内容は次のとおりです...

Linux で MySQL をインストールして設定する

システム: Ubuntu 16.04LTS 1\公式サイトからmysql-5.7.18-linux-...

mysql 5.6.21 のインストールと設定の詳細な手順

1. 概要MySQL バージョン: 5.6.21ダウンロードアドレス: https://dev.my...

WindowsでのMySQLインストールチュートリアルの詳細な紹介

目次1. ダウンロードする前に理解しておくべき概念2. 必要なバージョンを選択する3. MySQLサ...

MySQLデータクエリが多すぎるとOOMが発生するかどうかについての簡単な議論

目次サーバー層でのフルテーブルスキャンの影響InnoDB におけるフルテーブルスキャンの影響Inno...

MySQLトランザクション処理の使用方法とサンプルコードの詳細な説明

MySQL トランザクション サポートは、MySQL サーバー自体にバインドされているのではなく、ス...

WeChatアプレットでのwxsファイルの素晴らしい使い方をいくつか紹介します

目次序文応用フィルタードラッグファイル間での参照の受け渡しwxsはjsロジック層にパラメータを渡しま...

Win32 MySQL 5.7.27 のインストールと設定方法のグラフィックチュートリアル

MySQL 5.7.27のインストールチュートリアルは以下のように記録され、皆さんと共有されています...

ネイティブ JS で音楽プレーヤーを実装するためのサンプル コード

この記事では主に、次のように共有されるネイティブ JS 音楽プレーヤーのサンプル コードを紹介します...

JavaScript のデシェイクとスロットリングの例

目次安定スロットル: 手ぶれ防止: 一定時間内に最後のタスクのみを実行します。スロットル: 一定期間...

超詳細なMySQL使用仕様の共有

最近、データベース関連の操作が多くなり、会社の既存の仕様はあまり包括的ではありません。インターネット...

Linux (Centos7) に mysql8.0.18 をインストールするチュートリアル図

1 インストールリソースパッケージmysql-8.0.18-1.el7.x86_64.rpm-bun...