[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 メーリングリストの案内