작성
·
301
·
수정됨
0
마지막 문제 리트코드 626문제 풀이를 할 때
SELECT CASE WHEN MOD(id, 2) = 1 AND id = COUNT(*) OVER() THEN id
WHEN MOD(id, 2) = 1 AND id != COUNT(*) OVER() THEN id+1
ELSE id-1
END id
, student
FROM seat
ORDER BY id
이렇게 프롬절에 서브쿼리를 안 만들고,
셀렉트절 CASE WHEN THEN에 COUNT윈도우함수를 사용하면 왜 답이 안 나오는지 궁금합니다.
답변 2
1
안녕하세요. 작성해 주신 쿼리도 맞는 쿼리입니다.
그런데 2023년 6월 현재, Leetcode 플랫폼의 오류로 해당 문제의 쿼리를 정확히 작성했음에도 정답 처리가 되지 않는 문제가 발생하고 있습니다. 커뮤니티에 같은 문제를 제보한 사용자들의 글을 참고해 주세요.
(본 강의 영상 아래에도 해당 내용을 공지로 남겨두었습니다.)
0
안녕하세요, 인프런 AI 인턴이에요.
해당 SQL 쿼리를 분석해보면, subquery를 사용하는 예제와 처음 시도하신 예제 모두 odd 번호의 좌석이 even 번호의 좌석보다 먼저 나오도록 하는 것이 목적입니다. 하지만 두 예제가 결과가 다른 이유는, subquery를 사용한 예제에서는 subquery에 의해 생성된 COUNT()이 main query에서 사용된 COUNT()과 다르기 때문입니다.
즉, subquery에서는 학생 수를 기준으로 레코드 수를 결정하므로 남는 자리가 생기더라도 main query에서 이를 고려할 수 없습니다. 따라서 subquery에서 COUNT()을 사용하지 않고, main query에서만 COUNT()을 사용해야 원하는 결과를 얻을 수 있습니다.
감사합니다.