본문 바로가기

04번. IT 힌트얻기/▶ DB/ SQL

SUM(DECODE...)



문제 1번은 GROUP BY의 활용에 대한 예제로서 보기에는 문제가 어려워 보이지만 조금만 고민하고, 조금만 생각을 바꿔본다면 하나의 Query로 처리가 된다는 것을 볼 수 있다.
절차적인 사고방식은 벗어버리고, 집합적인 사고를 가진다면 프로그램으로 데이터를 가져와서 처리하는 것보다 훨씬 더 쉽게, 그리고 간단하게 처리할 수 있다는 것을 느끼기 바란다.

문제 2번을 풀어보면 답안 2-1과 답안 2-2는 같은 합계가 나온다.
그러나 처리 일량을 생각해보면 2-1의 쿼리보다는 2-2의 쿼리가 좀 더 좋은 쿼리라 말할 수 있다.
잠시 왜 2-2  Query가 더 좋은 Query가 더 좋은 Query라 하는지 생각해 보기 바란다.

생각해 보면 아주 사소한 부분이라고도 할 수 있겠으나 분명 차이는 있다.
2-1은 decode함수 안에서 매출 * 제품별 상수(10,20,30)를 곱한 후 sum을 한 문장이다.
이 문장은 모든 Row에 대해서 계산을 하게 된다.
즉, Row 단위로 제품이 HP인지 ZZ인지 이것도 아닌지를 체크한 후 상수(10,20,30)을 곱하게 되어 있다.
즉 먼저 sum을 하여 제품별로 값을 구해 Row의 수를 줄여놓은 후에 상수를 곱했다는 것이다.
물론 당장에 보면 별 문제는 없어보인다.

그것은 자료가 몇 건 안되는 상황에서 테스트를 하기 때문인데, 만일 데이터가 100만건이상이라고 가정해 본다면 결코 쉽게 생각할 문제는 아니라는 것을 직감적으로 알게 될 것이다.

'04번. IT 힌트얻기 > ▶ DB/ SQL ' 카테고리의 다른 글

대용량 데이터베이스를 위한 어드바이스  (0) 2011.09.29
HASH JOIN  (0) 2011.09.27
SORT MERGE JOIN  (0) 2011.09.27
ORACLE NESTED LOOP JOIN  (0) 2011.09.27
1. Function의 종류  (0) 2011.09.01