TIL

2024-09-02

여연찌 2024. 9. 2. 19:56
  • Today

데이터 분석 온보딩 과제

 


  • Today I Learned

 

SQL

 

1. 한 번 이상 활용한 인원

SELECT count(DISTINCT userid) 
FROM data_set
WHERE result NOT LIKE 'CANCEL'

 

그래도 이 문제는 쉽게 풀이를 했다.. .

아주 간단한 문제 였음 .. 

 

2. 최종 합격한 인원은 몇명이고, 그 그룹의 이력서 진단/ 코칭 신청 의 평균 횟수

 

처음 풀이했을 때에는

SELECT AVG(resume_count)
FROM 
	(
	 SELECT userid, count(*) AS resume_count
	 FROM data_set
	 WHERE status = '최종합격' AND type = 'resume' AND RESULT != 'cancel'
	 GROUP BY 1
	) a

이렇게 풀이했는데 아무리 해도 정답지와 같은 값이 나오지 않는 거다...

결국 정답과 같았던 쿼리는 다음과 같다.

WITH a AS (
	SELECT userid,
		   count(CASE WHEN TYPE = 'resume' THEN 1 END) resume_count,
		   count(CASE WHEN TYPE = 'interview' THEN 1 end) interview_count
	FROM data_set
	WHERE status = '최종합격' AND RESULT != 'cancel'
	GROUP BY userid
	)
SELECT count(userid)
	 , avg(resume_count)
	 , avg(interview_count)
FROM a

case 구문으로 조건에 충족하면 1을 더해주는 방식으로 count 를 해준다.

where 절에서 최종합격이며 cancel 을 제외해야 한다는 조건을 주었다.

유저별로 그룹화 한뒤, 해당 유저들의 명수와 resume 의 평균 횟수, interview 의 평균 횟수

를 구해주었다.

 

3. 진단+코칭을 가장 많이 활용한 인원의 각 횟수는 몇 번이며, 그 인원의 id 값

SELECT userid
	 , count(CASE WHEN TYPE = 'resume' OR TYPE = 'interview' THEN 1 end) AS cnt
FROM data_set
WHERE RESULT != 'cancel'
GROUP BY userid
ORDER BY cnt DESC
LIMIT 1

resume 또는 interview 라면 1을 더해주며 count 를 해준다.

여기서 cancel 은 제외한다.

유저별로 그룹화 해준뒤 count 의 내림차순으로 정렬 하고, 1개의 값만 출력한다

 


Python

 

 

1.

df[df['result'] != 'CANCEL']['userid'].nunique()

 

2.

df[df['status']=='최종합격']['userid'].nunique()

 

나머지는 내일 이어서!

 


  • Next

온보딩 과제 2번째 풀이 

 

 

 

 

'TIL' 카테고리의 다른 글

2024-09-05  (1) 2024.09.05
2024-09-03  (0) 2024.09.03
2024-08-22  (0) 2024.08.22
2024-08-21  (0) 2024.08.21
2024-08-20  (1) 2024.08.20