プロが教える店舗&オフィスのセキュリティ対策術

Oracleで簡単な集計処理を作成しているのですが、
集計後の値が倍になってしまいます。

ローカル環境でテストした際には問題なく
集計可能なのですが、テスト環境にアップした際に
倍になる現象が発生しました。

■ローカル環境
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product

■テスト環境
Oracle Database 9i Enterprise Edition Release 9.2.0.4.0

DBやテーブルの設定の問題かと思っておりますが、
検討がつかず困っております。
調査の方向性などだけでもご教授いただけましたら幸いです。

よろしくお願いいたします。

A 回答 (3件)

#1です。



> 同じデータであることは間違いありません。
#2さんのご指摘のとおり、確認することからはじめたほうがよさそうですよ。

「レコード件数が一致しているか」二つの環境を確かめましたか?
まずは結合しないで、レコード数と数値項目のSUMを取得。

select count(*), count(DISTINCT ID) from MST_ENTRY;
同数が得られれば良いが、2:1の結果が出るようなら
「ID列にPRIMARY KEY貼り忘れてる&うっかりINSERTを2回実行」とか。

select count(*), sum(MCNT), sum(PCNT) from TBL_VOTE;
こちらも二つの環境で完全一致しますか?

この回答への補足

ご回答ありがとうございます。

ご指摘の通り、データの確認不足があります。
TBL_VOTEの内容は確認していましたが、
MST_ENTRYの確認はしていませんでした。

今手元に環境がないので確認が取れ次第
ご報告いたします。

ありがとうござます!

補足日時:2011/06/18 23:02
    • good
    • 0

テスト環境ではデータ行数が倍だった,なんてよくある話ですよね。

    • good
    • 0

同じ構造・同じデータ・環境のみ異なる状況で結果が倍なのか?


SQL文とテーブル構造を示していただくことは可能ですか?

この回答への補足

テストデータ及びソースはローカルと全く同じものを使用しているので
同じデータであることは間違いありません。
ただ、DBの作成がクライアントの管理体制の関係で直接触ることができないため、構造、環境が同じであるかどうかは不明です。
※テーブルに関してはこちらでcreate文を作成して送っているので
おそらく同じ構造になっていると思われます。

下記はテーブルのレイアウトです。
■MST_ENTRY
-----------------------------------------------------------------
ID(NUMBER)|NAME(VARCHAR2)

■TBL_VOTE
-----------------------------------------------------------------
DIVISION(NUMBER)|TIME(DATE)|ENTRY(NUMBER)|MCNT(NUMBER)|PCNT(NUMBER)

※TBL_VOTEに日ごとの数値を格納し、全データを集計します。

下記は問題のSQL文です。

SELECT ENTRY,E.NAME,SUM(MCNT) MCNT,SUM(PCNT) PCNT
FROM TBL_VOTE V
LEFT JOIN
(SELECT ID,NAME FROM MST_ENTRY) E
ON V.ENTRY = E.ID
GROUP BY ENTRY,E.NAME

補足日時:2011/06/18 10:20
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

補足にSQL文とテーブルレイアウトを掲載させていただきました。

お気づきの点がございましたらアドバイスお願いいたします。

お礼日時:2011/06/18 10:23

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す