나는이 다음GROUP BY를 사용하지 않고 집계하는 방법은 무엇입니까?
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
을 계산하는 것이 아니라 오라클이 필요하기 때문에 유일한 이유는 내가 다른 속성을 그룹화하고 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
"오라클은 GROUP BY 절이 있으면 모든 SELECT 특성이 GROUP BY 절에도 있어야한다고 요구합니다." 사실이 아닙니다. 또한 집계 될 수 있습니다. 원하는 그룹화 항목의 주어진 값에 대해 다른 값이 항상 일정하면 MAX와 같은 함수를 사용할 수 있습니다. –
찾고있는 내용이 잘못 정의되어 있습니다. 'attr1'에 대해 같은 값을 갖고'attr2'에 대해 다른 값을 가진 두 개의 행이 있다고 가정 해보십시오. 결과 집합이이 경우처럼 보이길 바랄까요? –