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생성해서도 사용이 가능합니다...!)
-- 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
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
;