ABAP Open SQL SELECT 문: GROUP BY 및 HAVING 절

GROUP BY

GROUP BY 절은 특정 열을 그룹으로 묶어 집계 된 데이터를 낼 수 있다. 예를 들어 이전 포스팅 (ABAP Open SQL SELECT 문: 집계 함수 SUM, AVG, MAX, MIN 등) 에서 SUM 으로 필드의 값을 합쳐 출력을 했는데, 지정한 필드의 값 끼리 묶어 세부적인 합계를 얻고 싶다 등의 경우 사용할 수 있다.

다음 코드는 carrid 값 별로 price 를 더해 출력하는 코드다. 참고로 INTO CORRESPONDING FIELDS OF TABLE 옵션을 사용할 때, AS 로 제대로 된 필드 명을 지정해주지 않으면 담기지 않는다. (AS 는 조회 한 필드의 명칭을 별도로 지정 할 때 사용한다.)

TYPES: BEGIN OF ty_table,
         carrid LIKE sflight-carrid,
         price  LIKE sflight-price,
       END OF ty_table.

DATA: lt_table TYPE TABLE OF ty_table,
      ls_table TYPE ty_table.

SELECT carrid SUM( price ) AS price
INTO CORRESPONDING FIELDS OF TABLE lt_table
FROM sflight
GROUP BY carrid.

LOOP AT lt_table INTO ls_table.
  WRITE: / ls_table-carrid, ls_table-price.
ENDLOOP.
ABAP
SFLIGHT 테이블 에서 carrid 값 별로 price 를 더해 출력
SFLIGHT 테이블 에서 carrid 값 별로 price 를 더해 출력

여러 개의 집계 함수도 함께 사용할 수 있다.

TYPES: BEGIN OF ty_table,
         carrid LIKE sflight-carrid,
         sum    LIKE sflight-price,
         avg    LIKE sflight-price,
         min    LIKE sflight-price,
         max    LIKE sflight-price,
       END OF ty_table.

DATA: lt_table TYPE TABLE OF ty_table,
      ls_table TYPE ty_table.

SELECT carrid
       SUM( price ) AS sum
       AVG( price ) AS avg
       MIN( price ) AS min
       MAX( price ) AS max
INTO CORRESPONDING FIELDS OF TABLE lt_table
FROM sflight
GROUP BY carrid.

WRITE: /(20)'carrid',
        (20)'sum',
        (20)'avg',
        (20)'min',
        (20)'max'.

LOOP AT lt_table INTO ls_table.
  WRITE: / ls_table-carrid UNDER 'carrid',
           ls_table-sum UNDER 'sum',
           ls_table-avg UNDER 'avg',
           ls_table-min UNDER 'min',
           ls_table-max UNDER 'max'.
ENDLOOP.
ABAP
SFLIGHT 테이블 에서 carrid 값 별로 price 를 각 집계 함수로 출력
SFLIGHT 테이블 에서 carrid 값 별로 price 를 각 집계 함수로 출력

HAVING

HAVING 절은 GROUP BY 절로 출력 될 결과에 조건을 지정할 때 사용 된다. 예를 들어, price 의 min 값이 최소 500,00 이상인 데이터만 출력하고 싶을 때 등에 사용이 가능하다. (WHERE 은 계산 후의 값에 조건을 줄 수 없다.)

TYPES: BEGIN OF ty_table,
         carrid LIKE sflight-carrid,
         sum    LIKE sflight-price,
         avg    LIKE sflight-price,
         min    LIKE sflight-price,
         max    LIKE sflight-price,
       END OF ty_table.

DATA: lt_table TYPE TABLE OF ty_table,
      ls_table TYPE ty_table.

SELECT carrid
       SUM( price ) AS sum
       AVG( price ) AS avg
       MIN( price ) AS min
       MAX( price ) AS max
INTO CORRESPONDING FIELDS OF TABLE lt_table
FROM sflight
GROUP BY carrid
HAVING MIN( price ) >= 500. "최소 500 이상의 price를 지닌 행만 출력

WRITE: /(20)'carrid',
        (20)'sum',
        (20)'avg',
        (20)'min',
        (20)'max'.

LOOP AT lt_table INTO ls_table.
  WRITE: / ls_table-carrid UNDER 'carrid',
           ls_table-sum UNDER 'sum',
           ls_table-avg UNDER 'avg',
           ls_table-min UNDER 'min',
           ls_table-max UNDER 'max'.
ENDLOOP.
ABAP
HAVING 절 이용 출력 결과
HAVING 절 이용 출력 결과
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
위로 스크롤