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

SQLを学びだしたばかりの初心者です。
皆様のお知恵を貸して下さい。

商品 サイズ 金額
AAA S     100
AAA M     200
BBB S     300
CCC M     200

↑このように登録されたDBがあるとします。

これから下記のような表を作りたいのですが
上手くSQLが書けません。

(追加)           
商品 サイズ 金額 最小サイズ
AAA S     100    S
AAA M     200    S
BBB S     300    S
CCC M     200    M

MIN関数とGROUP BYを使ってやればいいと思うのですが・・。
どうか宜しくお願いします。

A 回答 (3件)

最近のオラクルなら、オラクルらしく分析関数で書くと


スマートに書けるような気がします。

select 商品,サイズ,金額,
min(decode(サイズ,'S',0,'M',1,'L',2)) over(partition by 商品 rows between unbounded preceding and unbounded following) as 最小サイズ
from テーブル

古いオラクルや他のRDBの場合は、他の方が書かれているように自己結合と
なりますけどね。

select a.商品,a.サイズ,a.金額,b.最小サイズ
from
テーブル a,
(select 商品,min(decode(サイズ,'S',0,'M',1,'L',2)) 最小サイズ from テーブル group by 商品) b
where a.商品=b.商品

相応の件数がある場合は、テーブルの探査量の問題で、分析関数の方が速いと思います。
    • good
    • 0

group byが抜けていたので訂正。

動くかは未確認です。

selecttbl1.商品,
tbl1.サイズ,
tbl1.金額,
(select tbl3.最小サイズ
from
(selectsubtbl1.商品,
min(decode(subtbl1.サイズ, 'S', 1, 'M', 2, 'L', 3)) as 最小サイズ
fromtbl1 subtbl1
where tbl1.商品 = subtbl1.商品
group by subtbl1.商品) subtbl12,
(selectsubtbl2.商品,
decode(subtbl2.サイズ, 'S', 1, 'M', 2, 'L', 3) as サイズ区分,
subtbl2.最小サイズ
fromtbl1 subtbl2
wheretbl1.商品 = subtbl2.商品) subtbl22
where subtbl12.商品 = subtbl22.商品 and
subtbl12.最小サイズ = subtbl22.サイズ区分
) as 最小サイズ
fromtbl1
    • good
    • 0

selecttbl1.商品,


tbl1.サイズ,
tbl1.金額,
(select tbl3.最小サイズ
from
(selectsubtbl1.商品,
min(decode(subtbl1.サイズ, 'S', 1, 'M', 2, 'L', 3)) as 最小サイズ
fromtbl1 subtbl1
where tbl1.商品 = subtbl1.商品) subtbl12,
(selectsubtbl2.商品,
decode(subtbl2.サイズ, 'S', 1, 'M', 2, 'L', 3) as サイズ区分,
subtbl2.最小サイズ
fromtbl1 subtbl2
wheretbl1.商品 = subtbl2.商品) subtbl22
where subtbl12.商品 = subtbl22.商品 and
subtbl12.最小サイズ = subtbl22.サイズ区分
) as 最小サイズ
fromtbl1


こんなかなーーー・・・。試す環境が無いので確認とれてません。
文字をMIN()すると、MよりSの方が文字コードの関係で
でかくなってしまいますよ多分。
    • good
    • 0

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