[pgsql-jp: 33410] Re: PostgreSQLによる集計について。

Shinsuke Saitou saitou @ doragon.info
2004年 6月 29日 (火) 10:57:47 JST


Numajiri様

ご返信ありがとうございます、saitouです。
確かに、アドバイスのとうりですね・・・。
わからないと再現できないですよね。。

以下に、再現できるように、create文 と OKなSQL と NGなSQL
を記します。

>1. 任意のテーブルを選ぶ
今回は、以下に記しますテーブルを全部使わないといけないのです・・・。
テストの際は、MASTER_CHARACTERテーブルを除いたSQLで動作しました。

>2. そのテーブルと、それに関係したところを、SQL文から取り除く
はい、それは投稿以前にやっておりました。情報が足りませんでしたね・・。
現状、MASTER_CHARACTERテーブルを除いた、SQL(後述)にて動作確認済みです。

>3. それでもエラーが出るかチェック
エラーというか・・情報が抽出できないのです。

>4. 1-3を繰り返して、エラーの発生箇所を絞り込む
MASTER_CHARACTERテーブル関係のSQL文がおかしいと思っております。

>5. 発生箇所について、マニュアルの見直し
> トラブルの度にマニュアルと格闘すればスキルアップします。
そうですね、もっと色々と調べてみます。

■テーブル作成文
--【ALL_MASTER】
CREATE TABLE NEWLOG(
	caria_code VARCHAR(5) NOT NULL,
	contents_code VARCHAR(5) NOT NULL,
	category_code VARCHAR(5) NOT NULL,
	file_no VARCHAR(50) NOT NULL,
	date DATE,uid VARCHAR(20)
);

--【MASTER_CARIA】
CREATE TABLE MASTER_CARIA(
	caria_id VARCHAR(5) NOT NULL,
	caria_name VARCHAR(40)
);

--【MASTER_CONTENTS】
CREATE TABLE MASTER_CONTENTS(
	contents_id VARCHAR(5) NOT NULL,
	contents_name VARCHAR(40),
	total_type SMALLINT NOT NULL
);

--【MASTER_CATEGORY】
CREATE TABLE MASTER_CATEGORY(
	category_id VARCHAR(5) NOT NULL,
	category_name VARCHAR(30)
);

--【MASTER_CHARACTER】
CREATE TABLE MASTER_CHARACTER(
	caria_id VARCHAR(5) NOT NULL,
	contents_id VARCHAR(5) NOT NULL,
	char_id VARCHAR(5) NOT NULL,
	char_name VARCHAR(80),
	file_no VARCHAR(50) NOT NULL,
	category_id VARCHAR(5) NOT NULL
);

■OKなSQL(MASTER_CHARACTER関係のSQLを抜いてます。)
SELECT 
	l.caria_code, cr.caria_name, 
	l.contents_code, ct.contents_name, 
	max(l.file_no),
	l.category_code, cg.category_name, 
	count(l.file_no) as count 
FROM 
	all_master as l 
	inner join master_caria as cr  on l.caria_code	     = cr.caria_id 
	inner join master_contents as ct on l.contents_code  = ct.contents_id 
	inner join master_category as cg on l.category_code  = cg.category_id 
WHERE 
	substr(date,0,8) = '2004-02' and l.contents_code=99999 
GROUP BY 
	l.caria_code, l.contents_code, l.category_code, l.file_no, 
	cr.caria_name, ct.contents_name, cg.category_name ,cg.category_id 
ORDER BY 
	l.caria_code, l.contents_code, l.category_code, l.file_no;


■NGなSQL(上記にMASTER_CHARACTER関係のSQLを追加してます)
SELECT 
	l.caria_code, cr.caria_name, 
	l.contents_code, ct.contents_name, 
	ch.char_id, ch.char_name, 
	l.file_no, 
	l.category_code, cg.category_name, 
	count(l.file_no) as count 
FROM 
	all_master as l 
	inner join master_caria as cr  on l.caria_code	     = cr.caria_id 
	inner join master_contents as ct on l.contents_code  = ct.contents_id 
	inner join master_category as cg on l.category_code  = cg.category_id 
	inner join master_character as ch on l.file_no	     = ch.file_no 
	and  l.caria_code    = ch.caria_id 
	and  l.contents_code = ch.contents_id 
	and  l.category_code = ch.category_id 
WHERE 
	substr(date,0,8) = '2004-02' and l.contents_code=99999 
GROUP BY 
	l.caria_code, l.contents_code, l.category_code, l.file_no, 
	cr.caria_name, ct.contents_name, cg.category_name ,ch.char_id, 
	ch.char_name ,ch.caria_id, ch.contents_id, cg.category_id 
ORDER BY 
	l.caria_code, l.contents_code, l.category_code, l.file_no;

度々長文になってしまい、申し訳ありません。

何か、お気づきになりました点がありましたら
ご教授いただけないでしょうか。

以上、説明不足な点があるかと思いますが、どうかよろしくお願いいたします。




pgsql-jp メーリングリストの案内