데이터 분석 기술 블로그

Primary Department for Each Employee _ Easy. LeetCode * 본문

SQL/문제풀이

Primary Department for Each Employee _ Easy. LeetCode *

데이터분석가 이채은 2024. 10. 26. 15:39

 

Solution

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(department_id) = 1);

 

1차 시도

처음에는 예시만 보고 'primary_flag'가 'Y'이거나 employee_id = department_id인 데이터를 추출하려고 했으나 오답이었고 후자가 항상 맞지는 않다는 것을 알았다.

 

2차 시도

SELECT employee_id, department_id
FROM Employee
WHERE primary_flag = 'Y'
    OR (SELECT employee_id
        FROM Employee
        GROUP BY employee_id
        HAVING COUNT(department_id) = 1);

WHERE 문에서  'primary_flag'가 'Y'이거나 employee_id에 대해 GROUP BY를 했을 때 department_id의 개수가 1개인 데이터 행을 추출했다. 로직은 맞았으나 Operand should contain 1 column(s) 이 오류가 뜨게 된다. 이 오류는 서브쿼리가 반환하는 열의 개수가 1개여야 하는데, 그보다 많은 열을 반환했을 때 발생한다. 예를 들어 IN 절에서 잘못된 서브쿼리를 사용하거나, 비교 연산자에서 잘못된 서브쿼리를 사용하면 발생한다. 나 같은 경우에는 후자였다. IN을 사용해야 하는지 몰랐기 때문에 발생했고 IN을 포함하여 문제를 해결했다.