내가 오늘 사용할 패널 데이터의 칼럼은 아래와 같다

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%