• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:group byの並び順を変えるだけで結果が異なる)

group byの並び順を変えるだけで結果が異なる原因を考える

このQ&Aのポイント
  • group byの並び順を変えると、MINUS結合の結果が異なることがあります。
  • TRUNC関数がGROUP BYの並び順に影響を与えている可能性があります。
  • オラクルの障害が原因かもしれません。

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

#1です。 うーん、不思議ですね。主キーはなんでしょう? 検証できる環境が手元にないのですが、やはり#1の最後に書いたように  MINUS前後を別SQLにして、キー項目だけで考えてみては? SUMをしないでT1.COL5を素直にSELECTさせてみるのが良いと思います。 実は何か別テーブルと結合してるとか?

evaag777
質問者

お礼

ご回答ありがとうございます。 最終的には、SQLを色々つくりかえる事にしました。 どうも、ありがとうございました。

evaag777
質問者

補足

ご回答ありがとうございます。 >うーん、不思議ですね。主キーはなんでしょう? SELECTで抽出している項目の一部が主キーです。 COL1、COL2など。 >MINUS前後を別SQLにして、キー項目だけで考えてみては? MINUS結合前後を別々にして、 INSERT SELECT ・・ で、それぞれ別々のテーブルに出力しましたが、 それぞれのテーブルを見ると差分があります。 たた、SELECTした結果をそのままオブジェクトブラウザーなどで見ると、 登録した時に差分のあったデータに対して、差分がなくなりました。 つまり、MINUSやINSERT SELECTでは差分があるが、 データを直接見ると、該当データには差分がなかった。 それと、もう1点 minus結合の前後で、where 句で差分のあるデータのみに絞って minus結合すると差分がなくなります。 つまり全体では、差分が発生するのに、 差分のあるデータのみに絞ってminus結合すると差分がなくなる。 (出力結果が非常に不安定で、なぜこのように変わるのか分かりません) SUMしないでSELECTする件ですが、試せていません。次回試します。 >実は何か別テーブルと結合してるとか? 他のテーブルとも結合してます。 SQLは抽出項目などももう少し多く、長いため、簡略化して書いてました。 結合ですが、exists結合を2つしてます。 ----(抜粋)----- FROM TABLE1 T1 WHERE EXISTS (SELECT 1 FROM TABLE2 T2) WHERE T1.COL1 = T2.COL1 AND T2.DAT2 = 'xxx') EXISTS (SELECT 1 FROM TABLE2 T2 ,TABLE3 T3) WHERE T1.COL2 = T3.COL2 AND T1.COL3 = T2.COL3 AND T2.DAT3 BETWEEB 'a001' AND 'a009' ----------------

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> 並び順を変えると結果が異なるのですが 何がちがうの?SUMの結果?レコード行数? レコードの行数が異なっても、SUMの総合計は一致しそうなものですが。 > TRUNC(T1.COL4,'MONTH') COLM 日付型の列から '月' を取り出そうとしてるんでしょ。 異なる年or日で同じ月のレコードがあるんじゃない? MINUS前後を別SQLにして、キー項目だけで考えてみては?

evaag777
質問者

補足

解答ありがとうございます。 >何がちがうの?SUMの結果?レコード行数? 異なるのはSUMの結果です。レコード行数は同じです。 元テーブルには、ある同じ年月日でレコードが2件あります。 (例) ------------- COL4     COL5 2011/09/01  100 2011/09/01  200 ------------------ 結果の1つは、合計値(300)を返し、もう1つは片方のみ(100)を返してます。 その為、minusで差分が出てます。 本来、合計値(300)を返してほしい。 >日付型の列から '月' を取り出そうとしてるんでしょ 'MONTH'で指定することで、'年'および'月'で取り出そうとしてます。 ’年月’を基準にしてます。 もっとも分からないのは、結局group byの項目順番を変えてるだけなんですが、 それが結果に影響する事があるのでしょうか?

関連するQ&A