SQL重複排除方法の概要

SQL重複排除方法の概要

SQL を使用してデータを抽出する場合、テーブル内で重複した値に遭遇することがよくあります。たとえば、UV (ユニーク ビジター数) を取得する場合は、重複を排除する必要があります。

MySQL では通常、 distinct句またはgroup by句が使用されますが、ウィンドウ関数をサポートする SQL ( Hive SQLOracleなど) では、 ROW_NUMBER ウィンドウ関数を使用して重複排除を行うこともできます。

たとえば、次のようなテーブルタスクがあります。

述べる:

  • task_id : タスク ID;
  • order_id : 注文ID;
  • start_time : 開始時刻

: 1つのタスクは複数の注文に対応します

タスクの合計数を見つける必要があります。task_id は一意ではないため、重複を削除する必要があります。

明確な

-- task_id のすべての一意の値を一覧表示します (重複排除後)

異なるtask_idを選択する
タスクから;

--タスクの合計数 select count(distinct task_id) task_num
タスクから;


distinctは通常、効率が低くなります。重複排除後の特定の値を表示するのには適しておらず、通常はcountと組み合わせてエントリの数を計算するために使用されます。
distinct使用する場合は、 selectの後に配置して、後続のすべてのフィールドの値を重複排除します。たとえば、 distinct後に 2 つのフィールドがある場合、2 つのレコード 1,1 と 1,2 は重複値ではありません。

グループ化

-- task_id の一意の値をすべて一覧表示します (重複排除後、null も値になります)
-- タスクIDを選択
-- タスクから
-- task_id でグループ化します。

--タスクの合計数 select count(task_id) task_num
(タスクIDを選択)
   タスクから
   タスクIDでグループ化) tmp;

行番号

row_number は次の構文を持つウィンドウ関数です。

row_number() over (partition by <用于分組的字段名> order by <用于組內排序的字段名>)
部分partition by省略可能です。

 -- ウィンドウ関数をサポートするSQLでは、select count(case when rn=1 then task_id else null end) task_numを使用します。
(タスクIDを選択)
    、row_number() オーバー (task_id によるパーティション、start_time による順序) rn
  タスクから) tmp;

さらに、テーブル テストを使用して、重複排除における distinctive と group by の使用について説明します。

 -- 下のセミコロンは行を区切るために使用されます。select distinctive user_id
Test から; -- 1; 2 を返します

異なる user_id、user_type を選択
Test から; -- 1, 1; 1, 2; 2, 1 を返します

ユーザーIDを選択
テストから
group by user_id; -- 1; 2 を返します

ユーザーID、ユーザータイプを選択
テストから
group by user_id, user_type; -- 1, 1; 1, 2; 2, 1 を返します

ユーザーID、ユーザータイプを選択
テストから
user_id でグループ化します。 
  -- Hive、Oracle などではエラーが報告されますが、MySQL ではこのように記述できます。
-- 1, 1 または 1, 2; 2, 1 (合計 2 行) を返します。 group by の後のフィールドのみが重複排除されます。つまり、最後に返されるレコード数は、前の SQL ステートメントのレコード数、つまり 2 レコードになります。group by の後に配置されず、select に配置されているフィールドの場合、1 つのレコードのみが返されます (通常は最初のレコードですが、パターンはありません)。

SQL 重複排除方法の概要についてはこれで終わりです。より関連性の高い SQL 重複排除方法については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • SQL における 3 つの重複排除方法の概要
  • MySQL で distinct メソッドを使用する詳細な例
  • MySQLの重複排除操作を極限まで最適化する方法
  • 重複したMySQLテーブルをマージして削除する簡単な方法
  • MySQLの重複排除方法
  • MySQL における重複排除の 2 つの方法とサンプル コードの詳細な説明
  • SQL学習ノート5:重複を削除して新しく追加されたフィールドに値を割り当てる方法

<<:  最新のウェブフロントエンドフレームワーク10選を紹介(翻訳)

>>:  1 つの記事で Apache Avro データを解析する

推薦する

Javascript を使用して、スライドバー効果のあるスライドナビゲーション プラグインを開発します。

目次1. はじめに2. 使用方法3. 開発プロセス1. モデル例2. イベントとアニメーション4. ...

WindowsはVMwareを使用してLinux仮想マシンを作成し、CentOS7.2オペレーティングシステムをインストールします。

目次1. ウィザードに従って仮想マシンを作成します2. オペレーティングシステムをインストールします...

MySQLトリガーの簡単な使用例

この記事では、例を使用して MySQL トリガーの簡単な使用方法を説明します。ご参考までに、詳細は以...

Linuxファイルを表示するコマンドの詳細な説明

Linuxファイルを表示する方法ファイルの内容を表示するコマンド: catは最初の行からコンテンツを...

使用したコマンドを表示するLinuxコマンドメソッドの概要

システムでは多くのコマンドが使用されていますが、使用したコマンドをどのように確認すればよいでしょうか...

Navicat がデータベース データ構造をインポートする際に発生するエラー datetime(0) の SQL レポートの問題を解決します。

エラー発生: MySQL 5.7 から SQL にデータベースをエクスポートし、それを MySQL ...

MySQL 時間差関数 (TIMESTAMPDIFF、DATEDIFF)、日付変換計算関数 (date_add、day、date_format、str_to_date)

1. 時間差関数(TIMESTAMPDIFF、DATEDIFF) MySQLを使用して時間差を計算...

JavaScript の構造化代入の一般的なシナリオと例 5 つ

目次序文1. データを抽出する2. エイリアス値3. 動的プロパティ4. オブジェクトの分解における...

vue3 タイムスタンプ変換 (フィルターを使用せずに)

vue2 では、タイムスタンプを変換するときに、通常はフィルターを使用します。vue3 以降では、...

JS を使用してファイルを操作する (FileReader は --node の fs を読み取ります)

目次JS はファイルを読み取る FileReader書類イベントとメソッド基本的な使い方イベント処理...

CentOS7 で jar アプリケーションの起動を設定する方法

プロジェクトの展開中に遭遇した落とし穴Zhihudemo を展開する際、Jenkins などの自動展...

MySql の忘れたパスワードの変更方法はバージョン 5.7 以上に適しています

1. まずmysqld.exeプロセスを停止します2. cmd を開き、mysql の bin ディ...

Vue2.0/3.0 での provide と inject の使用例

目次1. provide/inject の用途は何ですか? 2. provide/injectの使い...

NavicatでMySqlスケジュールタスクを作成する方法の詳細な説明

Navicat で MySql スケジュールタスクを作成する詳細な説明イベントは、MySQL が特定...

VMware Workstation Pro が Win10 アップデートにより開けなくなる問題の解決方法

今夜の夕食後にノートパソコンの電源を入れたところ、問題が発生しました。通常、コンピューターがスリープ...