[ORACLE] GROUP BY 1

2024. 5. 3. 10:39프로그래밍/ORACLE & SQL

- SUM을 수행하다가 발견.

예시)

SELECT SUM(NUM) OVER(PARTITION BY 1) SUM_NUM
  FROM (  SELECT 'A' CODE, 1 NUM
  FROM DUAL
  UNION ALL
  SELECT 'B' CODE, 2 NUM
  FROM DUAL
  UION ALL
  SELECT 'C' CODE, 0 NUM
    FROM DUAL)

* 예상 결과 :  첫번째 컬럼 값을 그룹별로 나눠 SUM 수행.
* 실제 결과

  - 전체 행을 SUM 한 결과로 출력됨.
  - 첫번째 컬럼의 데이터 값으로 그룹화를 하는 것이 아닌,
   '1'을 기준으로 그룹화 함을 알 수 있다.
  - PARTITION BY 2로 바꾸어도 같은 값임을 확인할 수 있을 것이다.

>> 예상 결과대로 수행하기 위한 수정 쿼리

SELECT SUM(NUM) OVER(PARTITION BY CODE) SUM_NUM
  FROM (  SELECT 'A' CODE, 1 NUM
  FROM DUAL
  UNION ALL
  SELECT 'B' CODE, 2 NUM
  FROM DUAL
  UION ALL
  SELECT 'C' CODE, 0 NUM
    FROM DUAL)



위의 PARTITION BY 수행을 쉽게 확인하기 위해, GROUP BY 로 풀어서 확인.

* GROUP BY 1

SELECT 1, SUM(NUM)
  FROM (SELECT 'A' CODE, 1 NUM
               FROM DUAL
               UNION ALL
             SELECT 'B' CODE, 2 NUM
                FROM DUAL
                UNION ALL
              SELECT 'C' CODE, 0 NUM
                FROM DUAL)
GROUP BY 1                


* GROUP BY {컬럼명}

SELECT CODE, SUM(NUM)
  FROM (SELECT 'A' CODE, 1 NUM
               FROM DUAL
               UNION ALL
             SELECT 'B' CODE, 2 NUM
                FROM DUAL
                UNION ALL
              SELECT 'C' CODE, 0 NUM
                FROM DUAL)
GROUP BY CODE                

'프로그래밍 > ORACLE & SQL' 카테고리의 다른 글

[Oracle] Filter 오퍼레이션  (0) 2024.07.30
[ORACLE] 파티션 테이블 조회  (0) 2024.06.21
[SQL] 쿼리문 실행순서  (0) 2023.03.27
[ORACLE] 문자열 반복  (0) 2023.03.10