BigQuery(BQ) でレコードの重複を除外したり、集計する際に特定カラムでユニークなカウントをする際には DISTINCT を使用します。
こちらの記事ではBigQuery初心者向けにDISTINCTの使い方を解説します!
DISTINCTとは
BigQueryで集計をする際に重複したレコードが存在することがあります。集計結果で重複を除外して表示したい場合にDISTINCTを用います。
DISTINCTを用いることで、SELECTで選択して取得したカラムが一致しているレコードを除外することができます。
DISTINCTの使い方
実際のDISTINCTの使い方を解説していきます。
重複を除外してレコードを表示
SELECTに続けてDISTINCTを記載し、続けて重複を除外したいカラムを指定します。指定したカラムがすべて一致するレコードの重複が除外されます。
SELECT DISTINCT カラム1, カラム2 ... FROM table_name
サンプルクエリ
DISTINCTを使用しないで実行する。
WITH
data AS (
SELECT 1 AS id, "田中" AS name
UNION ALL
SELECT 2 AS id, "佐藤" AS name
UNION ALL
SELECT 3 AS id, "鈴木" AS name
UNION ALL
SELECT 3 AS id, "鈴木" AS name
UNION ALL
SELECT 4 AS id, "高橋" AS name
)
SELECT id, name FROM data
実行結果では重複したレコードが表示されます。
id | name |
1 | 田中 |
2 | 佐藤 |
3 | 鈴木 |
3 | 鈴木 |
4 | 高橋 |
DISTINCTを使用して実行する。
WITH
data AS (
SELECT 1 AS id, "田中" AS name
UNION ALL
SELECT 2 AS id, "佐藤" AS name
UNION ALL
SELECT 3 AS id, "鈴木" AS name
UNION ALL
SELECT 3 AS id, "鈴木" AS name
UNION ALL
SELECT 4 AS id, "高橋" AS name
)
SELECT DISTINCT id, name FROM data
実行結果では重複したレコードは除外されます。
id | name |
---|---|
1 | 田中 |
2 | 佐藤 |
3 | 鈴木 |
4 | 高橋 |
特定カラム(列)で重複を除外してユニークにカウントする
COUNTする際に指定するカラムの前にDISTINCTをつけることで、指定したカラムをユニークにカウントすることができます。
WITH
data AS (
SELECT 1 AS id, "田中" AS name
UNION ALL
SELECT 2 AS id, "佐藤" AS name
UNION ALL
SELECT 3 AS id, "鈴木" AS name
UNION ALL
SELECT 3 AS id, "鈴木" AS name
UNION ALL
SELECT 4 AS id, "高橋" AS name
)
SELECT
COUNT(id) AS id_count,
COUNT(DISTINCT id) AS id_distinct_count
FROM
data
実行結果を見るとユニークにカウントされていることがわかります。ユニークユーザーなどを集計する際はこちらの記法が便利です。
id_count | id_distinct_count |
---|---|
5 | 4 |
重複しているレコードを抽出する
以下のクエリで重複しているレコードを抽出することもできます。
WITH
data AS (
SELECT 1 AS id, "田中" AS name
UNION ALL
SELECT 2 AS id, "佐藤" AS name
UNION ALL
SELECT 3 AS id, "鈴木" AS name
UNION ALL
SELECT 3 AS id, "鈴木" AS name
UNION ALL
SELECT 4 AS id, "高橋" AS name
)
SELECT
id,
name,
COUNT(1) as cnt
FROM
data
GROUP BY
1, 2
HAVING
cnt > 1
実行結果は重複したレコードのみ表示されます。
id | name | cnt |
---|---|---|
3 | 鈴木 | 2 |
まとめ
こちらの記事では、
- BigQuery における DISTINCT とは
- DISTINCT の基本的な使い方、サンプルクエリ
について解説しました。
データ分析の集計で頻度高く使用するので是非活用してみてください!
コメント