【DB】ORACLE の GROUP BY とか PARTITION BY

これも備忘録として。


想定データ

SELECT ID, NAME, KBN, PRICE
FROM TRANSACTION1
;

区分がKBNってダサいよね・・・w

区分(KBN)ごとにまとめる

SELECT -- ID, -- NAME, KBN, SUM(PRICE), MAX(PRICE), MIN(PRICE)
FROM TRANSACTION1
GROUP BY KBN
ORDER BY KBN
;

区分(KBN)ごとにROW_NUMBERをつける

いつも忘れる「PARTITION BY」。

SELECT ID, NAME, KBN, PRICE, ROW_NUMBER() OVER(PARTITION BY KBN ORDER BY PRICE ASC) ROW_NUM
FROM TRANSACTION1
ORDER BY ID
;

先頭2件だけ取得

SELECT *
FROM( SELECT ID, NAME, KBN, PRICE, ROW_NUMBER() OVER(PARTITION BY KBN ORDER BY PRICE ASC) ROW_NUM FROM TRANSACTION1 )
WHERE ROW_NUM <= 2
ORDER BY ID
;

横で取得

SELECT T1.KBN, MAX(CASE WHEN T1.ROW_NUM = 1 THEN T1.PRICE END) AS ROW1, MAX(CASE WHEN T1.ROW_NUM = 2 THEN T1.PRICE END) AS ROW2, MAX(CASE WHEN T1.ROW_NUM = 3 THEN T1.PRICE END) AS ROW3
FROM ( SELECT KBN, PRICE, ROW_NUMBER() OVER(PARTITION BY KBN ORDER BY PRICE ASC) ROW_NUM FROM TRANSACTION1
)T1
GROUP BY T1.KBN
;


ということでちょい適当なSQLになってしまったが、まとめたい情報はまとめたかな。
以上。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください