人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

次のようなSQLがあります。

SELECT 商品区分, SUM(数量)
FROM 在庫テーブル
GROUP BY 商品区分

これを元に

・グループA:商品区分が12,23,34
・グループB:商品区分が11,22,33
・グループC:商品区分が上記以外

でグループ化するSQLを書いてみました。

SELECT "グループA", SUM(数量)
FROM 在庫テーブル
WHERE 商品区分 IN ('12', '23', '34')

UNION

SELECT "グループB", SUM(数量)
FROM 在庫テーブル
WHERE 商品区分 IN ('11', '22', '33')

UNION

SELECT "グループC", SUM(数量)
FROM 在庫テーブル
WHERE ( 商品区分 <> '12'
AND 商品区分 <> '23'
AND 商品区分 <> '34'
AND 商品区分 <> '11'
AND 商品区分 <> '22'
AND 商品区分 <> '33'
)

もっとシンプルな書き方があれば教えてください。

●質問者: akio0911
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:23 GROUP SELECT SQL グループ
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● KUROX
●35ポイント

各SELECT文の後ろにGROUP BY 商品区分が必要な気がします。

で、このSQLで実用レベルでシンプルだと私は思います。

----------------------------------------------

DBがORACLEなら

DECODE関数となにかを組み合わせれば別のSQLを書けるかも

しれませんが・・・。

http://www.mars.dti.ne.jp/~o-shin/new/kowaza/body530.html

http://oraclesqlpuzzle.hp.infoseek.co.jp/7-53.html

ORACLEのテクニックはこちらを

http://oraclesqlpuzzle.hp.infoseek.co.jp/


2 ● きゃづみぃ
●35ポイント

DECODEを使うのは いかがでしょうか?

SELECT

gp,SUM(数量)

FROM

(SELECT

DECODE(商品区分,

'12', "グループA",

'23', "グループA",

'34', "グループA",

'11', "グループB",

'22', "グループB",

'33', "グループB", "グループC") gp,

数量

FROM 在庫テーブル)

GROUP BY gp


3 ● chuken_kenkou
●10ポイント

RDBMS名とバージョンが分からないと、具体的なSQLを提示しても、質問者さんの環境では実行できないかも知れません。

select g,sum(数量)
 from
 (select
 case when 商品区分 in('12','23','34') then 'グループA'
 when 商品区分 in('11','22','33') then 'グループB'
 else 'グループC'
 end as g,
 数量
 from 在庫テーブル) as x
 group by g

4 ● 敷守ほむら
●10ポイント

質問文を読みましたが、次のように出したいんでしょうか。

次のように出すのであれば、SELECTの部分に商品区分を追加した上に、GROUP BY 商品区分をつける必要がありますが…。

商品区分 グループ名 sum(数量)
12 グループA 8
23 グループA 12

ついでに、グループCを少しシンプルにして、別名を使って、

SELECT 商品区分, "グループA" as グループ名, SUM(数量) as 合計

FROM 在庫テーブル

WHERE 商品区分 IN ('12', '23', '34')

UNION

SELECT 商品区分, "グループB" as グループ名, SUM(数量) as 合計

FROM 在庫テーブル

WHERE 商品区分 IN ('11', '22', '33')

UNION

SELECT 商品区分, "グループC" as グループ名, SUM(数量) as 合計

FROM 在庫テーブル

WHERE 商品区分 NOT IN ('12', '23', '34', '11', '22', '33')

どうでしょう?


そういえば、使用しているデータベース管理ソフトは何でしょうか?ソフトによってSQL文の書き方が違うので、もし教えていただけたらもっと簡単な書き方ができるかもしれません。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ