前提・実現したいこと
prestoのsqlで以下の■設定テーブルから重複行を抽出したいと考えています。
■重複判断の条件
- 空文字とNULLは同じと判断
- カラム「値1」は入力あり・なしで判断
※条件を全て満たしのが■文字列整形結果テーブルとなります。
まず重複行を抽出するのにsqlで以下文字列整形をwith句で順次行い、
- 文字列(VACHAR)へ変換
- 空文字とNULLを'入力なし'文字列に
- 値1の'入力なし'でない場合は'入力あり'へ変換
※optionは1,2と入力値で重複判断を行いたいので入力値のまま残す
その結果(■文字列整形結果テーブル)のカラム「code,option,値1」を文字結合しKEYを生成しこのKEYをGROUP BY key HAVING count(key)>0
で重複行を抽出しました。重複行は'bbb-2-入力なし'となる。
知見が低くかなり長いSQLでわかりにくく保守しにくい力業のコードになってしまったのですが、みなさんならどのようなSQLを書くかご助言いただければ幸いです。
よろしくお願いいたします。
■設定テーブル
code(VACHAR) | option(int) | 値1(double) |
---|---|---|
'aaa' | 空文字 | 0.5 |
'bbb' | 2 | NULLL |
'ccc' | NULL | 空文字 |
'aaa' | 1 | 0.5 |
'bbb' | 2 | 空文字 |
↓
■文字列整形結果テーブル
code | option | 値1 |
---|---|---|
'aaa' | '入力なし' | '入力あり' |
'bbb' | '2' | '入力なし' |
'ccc' | '入力なし' | '入力なし' |
'aaa' | '1' | '入力あり' |
'bbb' | '2' | '入力なし' |