본문 바로가기

DBMS

조회한 컬럼의 합계 구하기

각 테이블별 컬럼 사이즈를 구한 뒤 모두 더한 값을 조회하고 싶었다.

 

SELECT   C.CLASS_NAME,
          SUM(
          CASE
           WHEN "DATA_TYPE" = 'BIGINT' THEN 8.0
           WHEN "DATA_TYPE" = 'INTEGER' THEN 4.0
           WHEN "DATA_TYPE" = 'SMALLINT' THEN 2.0
           WHEN "DATA_TYPE" = 'FLOAT' THEN 4.0
           WHEN "DATA_TYPE" = 'DOUBLE' THEN 8.0
           WHEN "DATA_TYPE" = 'MONETARY' THEN 12.0
           WHEN "DATA_TYPE" = 'STRING' THEN A.PREC
           WHEN "DATA_TYPE" = 'VARCHAR' THEN A.PREC
           WHEN "DATA_TYPE" = 'NVARCHAR' THEN A.PREC
           WHEN "DATA_TYPE" = 'CHAR' THEN A.PREC
           WHEN "DATA_TYPE" = 'NCHAR' THEN A.PREC
           WHEN "DATA_TYPE" = 'TIMESTAMP' THEN 8.0
           WHEN "DATA_TYPE" = 'DATE' THEN 4.0
           WHEN "DATA_TYPE" = 'TIME' THEN 4.0
           WHEN "DATA_TYPE" = 'DATETIME' THEN 4.0
           WHEN "DATA_TYPE" = 'BIT' THEN FLOOR(PREC         / 8.0)
           WHEN "DATA_TYPE" = 'BIT VARYING' THEN FLOOR(PREC / 8.0)
           ELSE 0
          END) AS VOLUME
 FROM     DB_CLASS C
 JOIN     DB_ATTRIBUTE A
 ON       A.CLASS_NAME = C.CLASS_NAME
 AND      A.FROM_CLASS_NAME IS NULL
 WHERE    C.IS_SYSTEM_CLASS = 'NO'
 AND      C.CLASS_TYPE = 'CLASS'
 AND      C.CLASS_NAME <> '_CUB_SCHEMA_COMMENTS'
 GROUP BY C.CLASS_NAME

 

먼저 테이블별 컬럼 사이즈를 구하는 쿼리를 실행해보았다.

그리고 이 쿼리 전체를 감싸고 다시 sum을 해주면 된다.

 

 

SELECT SUM(VOLUME) AS VOLUME
FROM  (SELECT C.CLASS_NAME,
              SUM(
              CASE
               WHEN "DATA_TYPE" = 'BIGINT' THEN 8.0
               WHEN "DATA_TYPE" = 'INTEGER' THEN 4.0
               WHEN "DATA_TYPE" = 'SMALLINT' THEN 2.0
               WHEN "DATA_TYPE" = 'FLOAT' THEN 4.0
               WHEN "DATA_TYPE" = 'DOUBLE' THEN 8.0
               WHEN "DATA_TYPE" = 'MONETARY' THEN 12.0
               WHEN "DATA_TYPE" = 'STRING' THEN A.PREC
               WHEN "DATA_TYPE" = 'VARCHAR' THEN A.PREC
               WHEN "DATA_TYPE" = 'NVARCHAR' THEN A.PREC
               WHEN "DATA_TYPE" = 'CHAR' THEN A.PREC
               WHEN "DATA_TYPE" = 'NCHAR' THEN A.PREC
               WHEN "DATA_TYPE" = 'TIMESTAMP' THEN 8.0
               WHEN "DATA_TYPE" = 'DATE' THEN 4.0
               WHEN "DATA_TYPE" = 'TIME' THEN 4.0
               WHEN "DATA_TYPE" = 'DATETIME' THEN 4.0
               WHEN "DATA_TYPE" = 'BIT' THEN FLOOR(PREC         / 8.0)
               WHEN "DATA_TYPE" = 'BIT VARYING' THEN FLOOR(PREC / 8.0)
               ELSE 0
              END) AS VOLUME
     FROM     DB_CLASS C
     JOIN     DB_ATTRIBUTE A
     ON       A.CLASS_NAME = C.CLASS_NAME
     AND      A.FROM_CLASS_NAME IS NULL
     WHERE    C.IS_SYSTEM_CLASS = 'NO'
     AND      C.CLASS_TYPE = 'CLASS'
     AND      C.CLASS_NAME <> '_CUB_SCHEMA_COMMENTS'
     GROUP BY C.CLASS_NAME)

 

그러면 모두 더한 합계행 하나만 조회가 된다.

 

 

 

https://runnz121.tistory.com/3

 

Mysql 조회한 컬럼의 합을 구하기(sum of count)

내가 원하는 조건은 다음과 같았다. MYSQL 의 WITH ROLLUP함수처럼 합계를 구하되 이 함수를 쓰지 않는 것이였다. COUNT() 된 값의 SUM() 즉 SUM(COUNT()) 을 구하고 싶었다. 예시 쿼리는 다음과 같다. SELECT dat

runnz121.tistory.com