知っていないと恥ずかしい中級クラスSQL
何らかの最大値(最小値)のみの行を抽出する
WITH エイリアステーブル AS (SELECT ROW_NUMBER() OVER(PARTITION BY グループ化するカラム ORDER BY 日付 DESC) AS row_number, カラム1, カラム2 FROM テーブル) SELECT * FROM エイリアステーブル WHERE row_number = 1
・最新の日付のレコードのみを抽出したい場合に役立つ。MAX(日付)を使わずに済む。
縦横変換
参考:
https://qiita.com/k24d/items/79bc4828c918dfeeac34
WHERE 1=1 の使い方
・1=1を先頭に入れることで、そのあとに続く条件はすべてAND条件で記述することができる。
・TURE 〃
WITH句 の使い方
WITH al_xx1 AS (SELECT xxx FROM xxx), al_xx2 AS (SELECT xxx FROM xxx), al_xx3 AS (SELECT xxx FROM xxx)
SELECT xxx FROM al_xx1
except の使い方
①カラム除外
SELECT *,except(a)
a以外のカラムを取得する。
②比較
SELECT * FROM table1 EXCEPT DISTINCT SELECT * FROM table2
table1に存在するが、table2には存在しない行を返します。
クエリの結果が0行であれば、2つのテーブルはすべての行が一致しています。
※BigQueryでは、カラムの数・型が一致している必要あり。カラム名は異なってても良い。
select * from (select * from table1 except distinct select * from table2) union all select * from (select * from table2 except distinct select * from table1)
table1に存在するが、table2には存在しない
table2に存在するが、table1には存在しない行を返します。
|