SELECT a.*, b.*
(SELECT ATTR1, ATTR2, sum(QUANTITY) AS TOTAL_QTY,
ATTR3 FROM TABLE_A
WHERE ATTR4 > 0
GROUP BY ATTR1, ATTR2, ATTR3) a,
TABLE_B b
WHERE a.ATTR1 = b.ATTR1
AND a.ATTR2 = b.ATTR2
私だけATTR1
が正しいTOTAL_QTY
を計算しますが、Oracleが必要なため、唯一の理由は、私は他の属性をグループ化していますGROUP BY
に必要なようなクエリGROUP BY
句が存在する場合、すべてのSELECT
の属性がすべきことGROUP BY
節にもあります。
これは、Table_Aからこのクエリで属性が必要になるたびに、それをGROUP BY
に配置する必要があることを意味します。それは醜いだけでなく、パフォーマンスに影響を与える可能性があり、おそらくは副作用を予期しない可能性があります。
GROUP BY
句を除いて、それぞれのATTR1
グループのTOTAL_QTY
を計算するために上記のクエリを書き直すにはどうすればよいですか?
これは集合体の性質なので、グループ化する必要があります。グループ化する必要があるのは、合計するものや行の作成方法がわからないためです。この影響を排除する唯一の方法は、他の列max(attr1)、max(attr2)で集約を使用することですが、attr1とattr2が異なる行に異なる値を持つ場合、group byがより良いオプションである理由をすぐに知ることができます。同じ列 – xQbert
"Oracleでは、GROUP BY句が存在する場合、すべてのSELECT属性もGROUP BY句に含める必要があります。そうではありません - それらは集約することもできます。必要なグループ化項目の所与の値に対して他の値が常に一定であれば、MAXなどの関数を使用できます。 –
あなたが探しているものはあまり定義されていません。 'attr1'には同じ値を持ち、' attr2'には異なる値を持つ2つの行があるとします。この場合、結果セットはどのように見えますか? –