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

以下のようなカテゴリと商品の関係のテーブル(T_SHOUHIN_CATEGORY)と
カテゴリマスタテーブル(T_CATEGORY)があります。

CREATE TABLE T_SHOUHIN_CATEGORY(SHOUHIN_CD VARCHAR(13) NOT NULL,CATEGORY_CD CHAR(16));
▼データ
11111,C001001001001000
22222,C001001001002000
33333,C001001001001001

CREATE TABLE T_CATEGORY
(
CATEGORY_CD CHAR(16) NOT NULL,
LL_CATEGORY_CD CHAR(3),
L_CATEGORY_CD CHAR(3),
M_CATEGORY_CD CHAR(3),
S_CATEGORY_CD CHAR(3),
SS_CATEGORY_CD CHAR(3),
CATEGORY_NAME VARCHAR(255) NOT NULL
)
;
▼データ
C001000000000000,001,000,000,000,000,ファッション
C001001000000000,001,001,000,000,000,レディースファッション
C001001001000000,001,001,001,000,000,レディース、婦人服
C001001001001000,001,001,001,001,000,ワンピース
C001001001001001,001,001,001,001,000,半袖

ここから以下の階層の形でデータを取得したいです。

レディース、婦人服(件数)
ワンピース(2)
ボトムス、パンツ(1)
このワンピースとボトムス、パンツのそれぞれの件数を取得したのですが、
ワンピースカテゴリと半袖カテゴリの2を出したいのです。
サンプルSQLを教えていただきたいです。

●質問者: FujiiRock
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●300ポイント

CATEGORY_CD の先頭から13桁で判断すれば良いなら、下記のような具合。

SELECT
 (
 SELECT CATEGORY_NAME
 FROM T_CATEGORY t2
 WHERE t2.CATEGORY_CD = MIN( t1.CATEGORY_CD )
 LIMIT 0, 1
 ) `レディース`,
 count(*) `婦人服(件数)`
FROM T_SHOUHIN_CATEGORY t1
GROUP BY LEFT( t1.CATEGORY_CD, 13 )
;

結果

レディース婦人服(件数)
ワンピース2
ボトムス、パンツ1

動作確認はMySQL 5.1.69にて実施。
下記は質問文より作成したサンプルデータ。

CREATE TEMPORARY TABLE T_SHOUHIN_CATEGORY (
 SHOUHIN_CD VARCHAR(13) NOT NULL,
 CATEGORY_CD CHAR(16)
);
INSERT INTO T_SHOUHIN_CATEGORY VALUES
( '11111', 'C001001001001000' ),
( '22222', 'C001001001002000' ),
( '33333', 'C001001001001001' )
;
CREATE TEMPORARY TABLE T_CATEGORY (
 CATEGORY_CD CHAR(16) NOT NULL,
 LL_CATEGORY_CD CHAR(3),
 L_CATEGORY_CD CHAR(3),
 M_CATEGORY_CD CHAR(3),
 S_CATEGORY_CD CHAR(3),
 SS_CATEGORY_CD CHAR(3),
 CATEGORY_NAME VARCHAR(255) NOT NULL
);
INSERT INTO T_CATEGORY VALUES
( 'C001000000000000', '001', '000', '000', '000', '000', 'ファッション' ),
( 'C001001000000000', '001', '001', '000', '000', '000', 'レディースファッション' ),
( 'C001001001000000', '001', '001', '001', '000', '000', 'レディース、婦人服' ),
( 'C001001001001000', '001', '001', '001', '001', '000', 'ワンピース' ),
( 'C001001001001001', '001', '001', '001', '001', '000', '半袖' ),
( 'C001001001002000', '001', '001', '001', '001', '000', 'ボトムス、パンツ' )
;

こういったものを作りたい場合は、
まずは単一のテーブルでベースを作ります。
名前を入れる前はこのような感じになりますので、
上記と比較してみてください。

SELECT
 MIN( t1.CATEGORY_CD ) `レディース`,
 count(*) `婦人服(件数)`
FROM T_SHOUHIN_CATEGORY t1
GROUP BY LEFT( t1.CATEGORY_CD, 13 )
;
レディース婦人服(件数)
C0010010010010002
C0010010010020001

FujiiRockさんのコメント
ありがとうございます!!試してみます!おそらくleftで13としている部分を10にすれば、それ以下からさまった件数になりそうですし(・∀・)
関連質問

●質問をもっと探す●



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