SQL

SQL中級

更新日:

知っていないと恥ずかしい中級クラス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には存在しない行を返します。

 

 

-SQL

Translate »

Copyright© 解決方法あった! , 2021 All Rights Reserved Powered by STINGER.