集計を使用してクエリの一部の集計に問題があります。 何が起こっているか説明するのは少し難しいですが、私はベストを尽くします:
私は3つのテーブルを持っています - 詳細、詳細と場所。 場所は、世界の場所を含む表です。詳細には、発生したイベントの詳細が含まれています。詳細については、イベントに関するさらに詳しいデータがあります。
各場所はID
とParentID
です(ニューヨークのようにID
があり、その親のID
はUS
です)。イベント(詳細)のID
は、追加情報テーブルの列として何度も表示されます。余分な詳細テーブルには、そのイベントが発生した場所のID
も保持されます。
それでも、私が達成しようとしているのは、各場所で、そこで起こったイベントの合計です。私はそれが非常に具体的に聞こえると思っていますが、それはクライアントが尋ねたものです。
とにかく、私が手に入れようとしているものの例: NewYork 60、Chicago 20、Houston 10それから米国には90があります。それにはいくつかのレベルがあります。
これは私がやろうとしたものである。
集約SQLでの集計(結合)
With C(ID, NAME, COUNTT, ROOT_ID) as
(
SELECT d.ID, d.NAME,
(SELECT COUNT(LX.ID) as COUNTT
FROM EXTRA LX
RIGHT JOIN d ON LX.PLACE_ID = d.ID -- ****
GROUP BY d.ID, d.NAME),
d.ID as ROOT_ID
FROM PLACES d
UNION ALL
SELECT d.ID, d.NAME,
(SELECT COUNT(LX.ID) as COUNTT
FROM EXTRA LX
RIGHT JOIN d ON LX.PLACE_ID = d.ID
GROUP BY d.ID, d.NAME),
C.ROOT_ID
FROM PLACES dx
INNER JOIN C ON dx.PARENT_ID = C.ID
)
SELECT p.ID, p.NAME, S.SumIncludingChildren
FROM places p
INNER JOIN (
SELECT ROOT_ID, SUM(COUNTT) as SumIncludingChildren
FROM C
GROUP BY ROOT_ID
) S
ON p.ID = S.ROOT_ID
ORDER BY p.ID;
詳細テーブルだけ自分のデータを示すためのものです。私は後でそれを追加します。それぞれの列を比較するだけです。それを働かせるために私はそれを必要としません。サイトデータの場合のみ。
'****'の 'd'を認識しないため、動作しません。もし私がそのテーブルの '新しいインスタンス'を置くなら、それはどちらも動作しません。だから私は右の結合の代わりにすべての場所を取得するクエリで'NOT EXISTS IN'
を実行して右の結合を複製しようとしました...。同じ問題。
多分私は何かを得ることはありません。しかし、私は本当に解決策といくつかの説明を求めています。私のコードは完璧ではないことが分かっています。 ありがとうございます。
編集:私はたぶん、あなたは、テーブルのDESCを追加することができ
ヒキガエル10.6にOracleSQLを使用していますか? – sers