アプリ版:「スタンプのみでお礼する」機能のリリースについて

PostgreSQLでテーブルのデータを下記のように値の小さい順に変えたい場合、
どのようなクエリで可能か教えていただけますでしょうか。

table_before
--------------------------------------------------------
column_a | column_b | column_c | column_d
--------------------------------------------------------
hoge | 1 | 5| 3
--------------------------------------------------------
hogehoge | 12 | 2| 6
--------------------------------------------------------
.
.
.
--------------------------------------------------------
hogelast | 8 | 5| 5
--------------------------------------------------------


table_after
--------------------------------------------------------
column_a | column_e | column_f | column_g
--------------------------------------------------------
hoge | 1 | 3| 5
--------------------------------------------------------
hogehoge | 2 | 6| 12
--------------------------------------------------------
.
.
.
--------------------------------------------------------
hogelast | 5 | 5| 8
--------------------------------------------------------

宜しくお願いします。

A 回答 (1件)

なぜ、そのような扱いにくいテーブル設計にするのか理解に苦しみますが。



WITH
cte AS (
SELECT
clm_a
,clm
,ROW_NUMBER() OVER(PARTITION BY clm_a ORDER BY clm) AS rn
FROM(
SELECT clm_a,clm_b AS clm FROM tbl_b
UNION ALL
SELECT clm_a,clm_c FROM tbl_b
UNION ALL
SELECT clm_a,clm_d FROM tbl_b
) AS x
)
SELECT
clm_a
,(SELECT clm FROM cte
WHERE clm_a=tbl_A.clm_a AND rn=1) AS clm_e
,(SELECT clm FROM cte
WHERE clm_a=tbl_A.clm_a AND rn=2) AS clm_f
,(SELECT clm FROM cte
WHERE clm_a=tbl_A.clm_a AND rn=3) AS clm_g
FROM tbl_b AS tbl_A
ORDER BY clm_a
;
    • good
    • 0
この回答へのお礼

回答有難うございます。
b,c,dの値で一番小さいものが1、且つ2番目に小さいものが4~5、且つ、一番大きいものが6~8の時
といった形で幾つかのパターンでデータを出したいのですが、
where句でそういった条件の抽出を行う関数が浮かばず、
小さい順にカラムを並び替えれば
where
column_e = 1
and
column_f >= 4
and
column_f <= 5
and
column_g >= 6
and
column_g <= 8
といった形で扱いやすいかと思ったのですが、
今度はそのテーブルを作る関数がわからず、このような形で質問しました。

お礼日時:2023/03/21 19:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!