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을 포함하여 문제를 해결했다.