각 테이블별 컬럼 사이즈를 구한 뒤 모두 더한 값을 조회하고 싶었다.
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