以下のようなデータがあった際に、SQLでcountryの重複を除外してデータを取得すると、「-」が最初になってしまいます。
SELECT DISTINCT country FROM table1
country | city |
---|---|
United States of America | New York |
United States of America | Chicago |
United States of America | San Francisco |
Japan | Nagoya |
Japan | Tokyo |
- | none |
ソートキーをつける
以前の記事にも書きましたが、UNIONで結合するときにソートキーを追加しすると、希望した通りに並び替えられました。
SELECT DISTINCT country, 1 AS sortkey FROM table1 WHERE country <> '-' UNION SELECT DISTINCT country, 2 AS sortkey FROM table1 WHERE country = '-' ORDER BY sortkey, country;
抽出条件を正規表現にする
最後のデータが「-」ではなく違う記号になった場合に対応が必要なので、WHEREの条件を正規表現にして、英字か英字以外かを判定して抽出するようにしました。
SELECT DISTINCT country, 1 AS sortkey FROM table1 WHERE country ~ '[a-zA-Z]' UNION SELECT DISTINCT country, 2 AS sortkey FROM table1 WHERE country !~ '[a-zA-Z]' ORDER BY sortkey, country;
これまで正規表現で抽出したことがありませんでしたが、使い方がわかると便利でした。