하나의 레코드에 포함된 여러 개의 값을 비교해보는 방법입니다. 연도 별 각 분기의 매출 테이블을 아래와 같이 형성해 주었습니다.
분기별 매출 증감 판정
SQL에서 하나의 레코드가 가지고 있는 값을 select문으로 한 번에 볼 수 있습니다.
CASE 식을 이용해 조건을 걸어주고 1분기보다 2분기의 매출이 많은 경우 '+' 같으면 공백, 적은 경우 '-'을 출력하며,
매출액 차이는 'different_q2-q1'으로 출력하며 SIGN함수를 적절히 이용하면 CASE 식보다 더욱 간단하게 증감을 알아낼 수 있습니다.
SIGN함수는 위와 같으며 음의 인수, 0, 양의 인수에 각각 -1, 0, +1을 반환합니다.
q1과 q2만 비교하는 코드만 작성해 보았고 위와 같이 q1, q2, q3, q4도 서로 비교할 수 있습니다. 하지만 작년 q4와 다음 연도의 q1을 비교할 수는 없습니다. 위에서 활용한 테이블에서는 하나의 레코드에 같은 연도 4분기 매출만 저장되어있는 관계로 여러 레코드에 걸쳐있는 값을 비교하기 위해서는 여러 개의 레코드를 조합해야 합니다.
연간 최대/최소 4분기 매출 찾기
앞에서는 2개 칼럼만을 가지고 비교했습니다. 3개 이상의 칼럼을 비교할 때도 위와 같이 활용해도 되지만 코드가 복잡해지므로 간결하게 작성할 수 있도록 최댓값과 최솟값을 찾는 함수인 greatest, least 함수를 이용하여 코드를 작성해보겠습니다.
빅쿼리 같은 경우 인수에 null값이 포함되어 있다면 greatest, least 함수를 사용할 때 null값이 반환됩니다. 2017년 테이블 같은 경우 q2, q3의 값이 null이므로 null이 반환되었습니다.
연간 평균 4분기 매출 계산
1분기에서 4분기까지의 평균 매출을 구하는 코드를 작성해보겠습니다.
먼저 아래는 IEEE_DIVIDE 함수를 활용하여 q1부터 q4까지의 값을 계산하고 4로 나누는 쿼리입니다.
NULL값을 사칙연산하려면 COALESCE 함수를 사용해 변환하여야 합니다. 따라서 NULL값을 0으로 변환하면 나누기 연산을 했을 때 NULL값이 나오지 않고 아래와 같이 평균을 구할 수 있게 됩니다.
하지만 위와 같이 한다면 2017년도의 q3, q4값이 0으로 되고 q1과 q2의 합이 4로 나누어지기 때문에 평균값이 크게 낮아집니다. 따라서 2017년도의 q1, q2 만 가지고 평균을 내고 싶다면 COALESCE 함수와 SIGN함수를 사용하여 분모를 정합니다.
위와 같이 NULL이 아닌 칼럼만 이용하여 평균을 계산하는 쿼리를 작성해보았습니다.