용량이 큰 테이블의 특정 컬럼별로 min, max 날짜를 찾고싶습니다 1

by 초보 [2023.07.21 11:33:30]


select a1.subject

     , a1.regdate

, a2.key_nm

, a1.key

, a1.value

  from (  

  select every.subject, every.regdate, every.codename, every.type, every.key, every.value

  from  everydata  every 

  where every.code = ''

  ) a1

  inner join keyvalue_koreanname a2 on a1.key = a2.key  

 

위와 같은 쿼리가 있는데

 

여기에 매번 code = ''안에 어떤 code인지 입력하여서 원하는 값을 확인하고 있습니다.

 

code = ''에 매번 code를 입력하지않고

 

select code from code_dimension where code_name in ('가입자수', '로그인수', '구매자수') 

 

의 디멘젼테이블을 활용해서 code번호가 아닌 code명으로도 확인이 가능하도록 하고싶은데요.

(join을 걸거나 where every.code 안에 서브쿼리로 하는 것중에 무엇이 더 빠를까요?) 

 

그리고 이렇게 나오는 데이터를 

code별로 

최소 regdate와 최대 regdate와 그리고 최소regdate~최대regdate까지의 건수를 아래처럼 나오게 하고 싶습니다

 

code  code_name  min(regdate)  max(regdate) min~max건수
 1 가입자수  2021-01-01  2022-07-10 1000000
 2 로그인수  2021-04-01  2022-05-14 3000000
 3 구매자수  2021-03-01  2023-02-01 250000


혹시 이렇게 쿼리를 만들려면 어떻게 고쳐야할까요? 

(min~max가 어렵다면 min(regdate), max(regdate)까지만이라두요, 또한 index생성해서도 사용이 가능합니다...!) 

 

 

by JYK94 [2023.07.21 13:30:16]
-- 1.
SELECT A1.SUBJECT
	, A1.SUBJECT
	, A1.REGDATE
	, A2.KEY_NM
	, A1.KEY
	, A1.VALUE
	, A1.CODE
	, A3.CODE_NAME
FROM EVERYDATA A1
  INNER JOIN KEYVALUE_KOREANNAME A2
  		ON A1.KEY = A2.KEY
  LEFT OUTER JOIN CODE_DIMENTION A3
  		ON A1.CODE = A3.CODE
WHERE A3.CODE_NAME IN (...);


-- 2.
SELECT CODE
 ,MAX(CODE_NAME) AS CODE_NAME
 ,MIN(REGDATE) AS MIN_REGDATE
 ,MAX(REGDATE) AS MAX_REGDATE
 ,COUNT(*) AS CNT_MIN_MAX -- MIN~MAX건수 = CODE_NAME의 전체 건수
   FROM CODE_DIMENSION
GROUP BY CODE

by 마농 [2023.07.24 00:33:59]
SELECT a.code
     , a.code_name
     , MIN(b.regdate) min_regdate
     , MAX(b.regdate) max_regdate
     , COUNT(*) cnt
  FROM code_dimension a
 INNER JOIN everydata b
    ON a.code = b.code
 WHERE a.code_name IN ('가입자수', '로그인수', '구매자수')
 GROUP BY a.code, a.code_name
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입