【SQL】SQLでORDER BYとCASE文を使った並び替え
PostgreSQLでORDER BYとCASE文を使った並び替えを考えていきます。
customer_rank・・・会員ランク
purchase_store・・・購入店舗(横浜店:YOKOHAMA、上大岡店:KAMIOOKA、両店舗使用したことがある場合はBOTH)
customer_num・・・利用者数
のようなyk_tableについて考えていきます。
こちらは会員ランクごとに横浜店、上大岡店、両店舗使ったことのある会員の人数をカウントしたテーブルだと思って下さい。
このテーブルを会員ランクごとに上大岡店、横浜店、両店舗の順番に並び変えます。
SELECT * FROM yk_table ORDER BY customer_rank ,CASE purchase_store WHEN 'KAMIOOKA' THEN 1 WHEN 'YOKOHAMA' THEN 2 ELSE 3 END ;
実行結果が以下のようになります。
上のように会員ランクごとに、それぞれKAMIOOKA、YOKOHAMA、BOTHの順番に並び替えることができました。
手順としては
まずORDER BYで会員ランクごとにアルファベット順に並べます。
次にCASE文でそれぞれの購入店舗に対して並べたい順に数字を割り振ります。
これだけで好きなように順番を並び変えることができます。
こちらのテーブルは
CREATE TABLE yk_table( customer_rank VARCHAR(6), purchase_store VARCHAR(8), customer_num INTEGER );
INSERT INTO yk_table VALUES('SILVER', 'YOKOHAMA', 2678); INSERT INTO yk_table VALUES('BLACK', 'BOTH', 327); INSERT INTO yk_table VALUES('BRONZE', 'KAMIOOKA', 653415); INSERT INTO yk_table VALUES('GOLD', 'YOKOHAMA', 213); INSERT INTO yk_table VALUES('BLACK', 'KAMIOOKA', 342); INSERT INTO yk_table VALUES('BRONZE', 'BOTH', 37645); INSERT INTO yk_table VALUES('GOLD', 'BOTH', 2002); INSERT INTO yk_table VALUES('SILVER', 'KAMIOOKA', 50021); INSERT INTO yk_table VALUES('BRONZE', 'YOKOHAMA', 49765); INSERT INTO yk_table VALUES('BLACK', 'YOKOHAMA', 18); INSERT INTO yk_table VALUES('GOLD', 'KAMIOOKA', 2019); INSERT INTO yk_table VALUES('SILVER', 'BOTH', 19923);
これでつくることができるので数字を変えて好きな順番に並び変えながら試してみてください。