본문 바로가기

TIL

[240118] SQL: 코드카타 106~107 & 파이썬: 코드카타 18

[SQL 코드카타]

1789. Primary Department for Each Employee

https://leetcode.com/problems/primary-department-for-each-employee/description/

 

1) 어떤 문제가 있었나

- 소속 부서가 여러 개일 경우 주요 부서 구분값이 Y, 소속 부서가 하나일 경우 구분 값이 N인 직원의 ID와 부서 ID 추출 

- WHERE과 HAVING을 잘 이용해서 하나의 쿼리로 해보려 했지만 실패 

 

2) 내가 시도해본 건 무엇인가

- UNION 함수를 통해 2개 열 값을 동일 하게 맞춰서 조건을 다르게 적용. 하나는 WHERE로, 하나는 HAVING으로

select employee_id, department_id
    from Employee
    where primary_flag = 'Y'
    GROUP BY employee_id
union 
select employee_id, department_id
    from Employee
    GROUP BY employee_id
     HAVING COUNT(department_id) = 1

 

3) 어떻게 해결했나

- 다른 사람 풀이를 보니, HAVING 절 내용을 WHERE절 서브쿼리로 활용함

#다른 사람 풀이 
SELECT employee_id, department_id
FROM Employee
WHERE primary_flag = 'Y' OR employee_id in (
    SELECT employee_id
    FROM Employee
    GROUP BY employee_id
    HAVING COUNT(*) = 1
)
GROUP BY employee_id

 

4) 무엇을 새롭게 알았나

- WHERE 절에서 서브쿼리 등을 통해 다양하게 응용할 수 있는데, 제대로 활용을 못하고 있음

- HAVING 절에서 연산은 가능하나, 'primary_flag = 'Y'와 같은 다른 칼럼값을 활용한 조건은 적용 안됨


[회고]

- 팀원분께 파이썬 기초를 공부할 만한 자료를 공유 받았는데, 틈틈히 공부하며 연습문제 풀면 좋을 듯 

└ 한 권으로 끝내는 <파이썬 노트> https://wikidocs.net/book/6708

└  한 권으로 끝내는 <판다스 노트> https://wikidocs.net/book/4639