SQL を使用してデータを抽出および分析する場合、データが重複しているシナリオに遭遇することが多く、重複排除後にデータを分析する必要があります。
eコマース企業の売上報告書を例にとると、重複排除の一般的な方法としてdistinctまたはgroup byステートメントを使用していますが、今回は、ウィンドウ関数を使用してデータを重複排除する新しい方法を紹介します。
【フィールド説明】
訪問者ID:babyを閲覧するために入店したお客様
閲覧時間:訪問者がストアの閲覧ページに入った日付
閲覧時間: 訪問者がページを閲覧するためにストアに入る時間の長さ
ここで、ストア内の各訪問者と、対応する閲覧日を知る必要があります (同じ日に複数回閲覧したすべての訪問者が 1 つのレコードとしてカウントされます)。
【問題解決アイデア】
方法 1: 個別
SQL は次のように記述します。
select distinct 访客id ,浏览时间
from 淘宝日销售数据表;
検索結果:
distinct ステートメントを使用して複数のフィールドを重複排除する場合は、次の 2 つの点に特に注意する必要があります。
1) 個別の構文は、単一フィールドおよび複数フィールドの重複排除の場合、最初のクエリ フィールドの前に配置する必要があることを規定しています。
2) テーブル内の複数のフィールドが重複排除されている場合、重複排除プロセスは、複数のフィールド全体を重複排除することです. たとえば、上記の例では、訪問者 ID だけではなく、訪問者 ID と閲覧時間を全体として重複排除します. 重複排除後、名前は個別に重複排除されるため、同じ訪問者 ID が異なる閲覧時間に対応します。
方法2:group by
SQL は次のように記述します。
select 访客id ,浏览时间
from 淘宝日销售数据表
group by 访客id ,浏览时间;
検索結果:
group by グループ訪問者 ID と閲覧時間. グループ化と集計後、テーブルの行数が変更されます. 行には 1 つのカテゴリしかありません. group by を使用した後、訪問者 ID と閲覧時間は次のように保持されます.分類され、重複は表示されません。
方法 3: ウィンドウ関数
ウィンドウ関数を使用して重複排除を行う場合、distinct や group by よりも少し複雑になります. ウィンドウ関数は、元のテーブルの行数を減らすのではなく、グループ化後にフィールドを並べ替えます。ウィンドウ関数の詳しい説明(クリックしてください -わかりやすい学習:SQLウィンドウ関数)
ウィンドウ関数の基本的な構文は次のとおりです。
<窗口函数> over (partition by <用于分组的列名>
order by <用于排序的列名>)
トピックの要件に従って、各訪問者とそれに対応する閲覧日付を取得し、訪問者 ID、閲覧時間をグループ化し、閲覧時間 (秒) を並べ替えます。
SQL は次のように記述します。
select 访客id ,浏览时间 ,row_number()over(partition by 访客id ,浏览时间
order by 浏览时长(秒)) as 排名
from 淘宝日销售数据表;
検索結果:
ウィンドウ関数クエリは、顧客ごと、閲覧日ごとにグループ化されます. 同じ日に複数の閲覧があった場合は、いいねの数に従って並べ替えられ、フィルターのランキングは 1 であり、各訪問者とそれに対応する閲覧日は、得られる。
SQL は次のように記述します。
select 访客id ,浏览时间 ,row_number()over(partition by 访客id ,浏览时间
order by 浏览时长(秒)) as 排名
from 淘宝日销售数据表;
検索結果:
重複を削除するための 3 つの操作はできましたか? コメント欄に重複排除方法を追加してください〜
⬇️「原文を読む」をクリック
無料データ分析トレーニングキャンプに申し込む