WHERE절 Subquery
내가 오늘 사용할 패널 데이터의 칼럼은 아래와 같다
RNUM, SEL_DATE, OS, APP_NAME, PANEL_NO, SEX, AGE, PANEL_FLAG, DURATION, N_FACTOR, P_FACTOR, APP_CNT, TELECOM, SDK_VERSION, TTS, TTS_percentage
서브쿼리는 쿼리 안에 쿼리가 들어가기 때문에 한번에 작성하려고 하기 보다는 단계별로 나누어서 생각을 해서 작성을 하는 것이 좋다. A를 하고 B를 해서 합친다 느낌! A+B
WHERE절 서브쿼리
- 단일행 서브쿼리
- 비교연산자(=, <, >) 사용
Q. 평균 TTS보다 더 많이 이용한 PANEL_NO 상위 3개 출력.
select PANEL_NO
from sys.panel_data
where TTS > (select AVG(TTS) from sys.panel_data) limit 3;
Result
| PANEL_NO |
|---|
| 22998 |
| 41710 |
| 33913 |
- 다중행 서브쿼리
- IN, NOT IN 사용
Q. 연령별 SDK_VERSION이 13보다 높은 연령의 패널숫자, 성, 연령, 소프트웨어버전 추출.
select PANEL_NO, SEX, AGE, SDK_VERSION
from sys.panel_data
where AGE IN(
select AGE
from sys.panel_data
group by AGE
having SDK_VERSION > 13
);
Result
| PANEL_NO | SEX | AGE | SDK_VERSION |
|---|---|---|---|
| 22998 | Male | 25~29 | 14 |
-
다중칼럼 서브쿼리
Q. TELECOM별로 가장 높은 TTS의 이용 내역들(TELECOM, TTS, TTS비중)을 출력.
select TELECOM, TTS, TTS_percentage
from sys.panel_data
where (TELECOM, TTS) IN (
select TELECOM , MAX(TTS)
from sys.panel_data
group by TELECOM
);
Result
| TELECOM | TTS | TTS_percentage |
|---|---|---|
| etc | 902032626 | 31% |
| KT | 138754754 | 5% |
| SK | 77887640 | 3% |
| LG | 56946812 | 2% |