概要 | |
---|---|
目的 | Bigquery standard SQLにおけるset operaters syntaxの確認 |
分類 | SQL Cookbook |
SQL | Standard SQL |
環境 | BigQuery |
Table of Contents
- syntax
-
[UNION { ALL DISTINCT }](#union–all–distinct-) - INTERSECT DISTINCT
- EXCEPT DISTINCT
-
- XORオペレーション
syntax
1
UNION { ALL | DISTINCT } | INTERSECT DISTINCT | EXCEPT DISTINCT
UNION { ALL | DISTINCT }
- 二つのクエリの結果を結合する
ALL
を指定すると、recordが重複していてもそのまま残るDISTINCT
を指定すると、recordの重複は排除され一意になる
union all
1
2
3
4
5
6
7
8
9
10
11
12
13
WITH dat AS(
SELECT
1 AS col_1,
2 AS col_2
)
,dat_2 AS(
SELECT
1 AS col_1,
2 AS col_2
)
SELECT * FROM dat
UNION ALL
SELECT * FROM dat_2
THEN,
行 | col_1 | col_2 |
---|---|---|
1 | 1 | 2 |
1 | 1 | 2 |
union distinct
1
2
3
4
5
6
7
8
9
10
11
12
13
WITH dat AS(
SELECT
1 AS col_1,
2 AS col_2
)
,dat_2 AS(
SELECT
1 AS col_1,
2 AS col_2
)
SELECT * FROM dat
UNION DISTINCT
SELECT * FROM dat_2
Then,
行 | col_1 | col_2 |
---|---|---|
1 | 1 | 2 |
INTERSECT DISTINCT
- 両方に含まれるrecordを返す
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WITH dat AS(
SELECT
*
FROM UNNEST([STRUCT<col_1 INT64, col_2 INT64>
(1,2),
(2,3),
(1,2),
(3,4)
])
)
,dat_2 AS(
SELECT
1 AS col_1,
2 AS col_2
)
SELECT * FROM dat
INTERSECT DISTINCT
SELECT * FROM dat_2
THEN,
行 | col_1 | col_2 |
---|---|---|
1 | 1 | 2 |
EXCEPT DISTINCT
- left table(
except distinct
の前に呼び出したテーブル)に存在してright table(except distinct
の後に呼び出したテーブル)に存在しないrecordを抽出 EXCEPT ALL
はサポートされていない
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
WITH dat AS(
SELECT
*
FROM UNNEST([STRUCT<col_1 INT64, col_2 INT64>
(1,2),
(2,3),
(1,2),
(3,4)
])
)
,dat_2 AS(
SELECT
*
FROM UNNEST([STRUCT<col_1 INT64, col_2 INT64>
(1,2),
(1,2),
(5,4)
])
)
SELECT * FROM dat
EXCEPT DISTINCT
SELECT * FROM dat_2
THEN,
行 | col_1 | col_2 |
---|---|---|
1 | 2 | 3 |
2 | 2 | 3 |
XORオペレーション
BigQueryではxor
オペレーション固有のコマンドは存在しないですが,UNION ALL
,INTERSECT
,EXPECT
を組み合わせることで計算することは可能です.
以下例を紹介します
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
WITH dat AS(
SELECT
*
FROM UNNEST([STRUCT<col_1 INT64, col_2 INT64>
(1,2),
(2,3),
(1,2),
(3,4),
(3,4)
])
)
,dat_2 AS(
SELECT
*
FROM UNNEST([STRUCT<col_1 INT64, col_2 INT64>
(1,2),
(1,2),
(5,4)
])
),
dat_all AS(
SELECT * FROM dat
UNION ALL
SELECT * FROM dat_2
),
dat_intersect AS(
SELECT * FROM dat
INTERSECT DISTINCT
SELECT * FROM dat_2
)
SELECT * FROM dat_all
EXCEPT DISTINCT
SELECT * FROM dat_intersect
統計
Python
math
Linux
Ubuntu 20.04 LTS
Shell
English
git
方法論
Ubuntu 22.04 LTS
統計検定
競技プログラミング
フーリエ解析
前処理
SQL
coding
コミュニケーション
Network
ssh
将棋
Data visualization
Docker
Econometrics
VSCode
statistical inference
GitHub Pages
apt
development
システム管理
Coffee
cloud
数値計算
素数
Book
Font
Metrics
Poetry
Ubuntu 24.04 LTS
architecture
aws
shell
systemctl
テンプレート
データ構造
ポワソン分布
会計分析
文字コード
環境構築
論文
App
Bayesian
Dynamic Programming
Keyboard
Processing
R
Steam
filesystem
quarto
regex
(注意:GitHub Accountが必要となります)