ThinkCatLog

[SQL] MySQL - AI로 쿼리 틀린 부분 찾기 본문

데이터 분석/SQL

[SQL] MySQL - AI로 쿼리 틀린 부분 찾기

생각냥 2024. 5. 3. 11:48

목차

AI에게 물어보기
주의할 점

AI에게 물어보기

프로그래머스 문제를 풀다가 논리는 잘 짠것 같은데 쿼리 부분에서 어떤 실수가 발생했는지를 찾아내기가 어려웠다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

Test Case에선 잘 작동하는데, 문제 채점할 때에만 쿼리 결과가 잘 나오지 않았다. 채점이 어떤 test case로 되는지 확인할 수 없어서 쿼리에 어떤 문제가 있는지 확인하기가 더 어려웠다.

테스트 케이스는 성공하는데 채점을 실패;;

계속 고민하다가 밤샐것 같아서 문제와 작성한 쿼리를 Claude에게 입력해봤다. 과연 문제와 쿼리만 줬을때도 AI는 문제가 될만한 부분을 찾아낼 수 있는지 궁금했다.

결과는 성공적이었다. 문제가 된 부분을 잘 찾아냈다. 문제가 된 부분을 수정한 쿼리까지 같이 제시해주었다.

클로드 설명

3가지 문제점을 제시했는데 이 중 2번 문제가 테스트 실패의 핵심적인 원인이라 생각하여 이 부분만 수정해서 테스트를 진행했고 통과했다.

1과 0을 Bool로 취급하고 사용했는데, 2번째 CTE에서 SUM()을 사용한게 실패의 원인이었다. Claude에서 제시해준 문제점을 참고해서 쿼리를 수정했다. 간단히 함수만 SUM() → MAX()로 수정했다.

제시해준 쿼리도 있었지만 쓰지 않았다. 문제가 되지 않는 부분도 모두 수정한 쿼리라고 생각했고, 필요한 부분만 내가 수정해서 쓰면 된다고 생각했다.

쿼리가 어떻게 작성되었는지 설명해주는 답변이 신기했다.

클로드 설명

CTE로 3개의 서브쿼리를 작성하였고, 각각의 CTE를 설명해준 점이 인상적이었다. 쿼리를 작성하면 짧게 주석으로 설명을 달아주는 AI가 있으면 좋을 수도 있을 것 같다. 쿼리 작성후 한참 후에 볼때나 아니면 누군가 쿼리를 볼때 주석을 달아놓는게 많이 도움되기 때문이다. 이러한 점 때문에 주석을 작성하는데 은근 귀찮다. AI가 쿼리를 작성하자마자 위에 주석을 달아주면 편하지 않을까라는 생각을 해본다. 주석이 잘 작성되어있는지 확인하는 과정이 필요하니 귀찮을 수도 있겠다.

주석을 달아달라고 해봤다. 간결하게 잘 작성해주는 것 같다.

WITH DEVELOPERS_SKILL_CHECK AS ( -- 개발자의 스킬 코드를 비트 연산으로 분석하여 각 스킬 보유 여부를 0, 1로 표현
  SELECT
    ID,
    EMAIL,
    CASE
      WHEN CATEGORY = 'Front End' THEN 1
      ELSE 0
    END FRONT_END,
    CASE
      WHEN NAME = 'Python' THEN 1
      ELSE 0
    END Python,
    CASE
      WHEN NAME = 'C#' THEN 1
      ELSE 0
    END C_sharp
  FROM DEVELOPERS D
  INNER JOIN SKILLCODES S
    ON (D.SKILL_CODE & S.CODE) = S.CODE
), DEVELOPERS_SKILL_PIVOT AS ( -- 개발자별로 각 스킬 보유 여부를 그룹화하여 MAX 연산으로 중복 제거
  SELECT
    ID,
    EMAIL,
    MAX(FRONT_END) AS FRONT_END,
    MAX(Python) AS Python,
    MAX(C_sharp) AS C_sharp
  FROM DEVELOPERS_SKILL_CHECK
  GROUP BY ID, EMAIL
), DEVELOPERS_GRADE AS ( -- 각 개발자의 GRADE를 문제 조건에 따라 결정
  SELECT
    ID,
    EMAIL,
    CASE
      WHEN (FRONT_END = 1) AND (Python = 1) THEN 'A' -- Front End와 Python 스킬을 모두 가져야 A 등급
      WHEN C_sharp = 1 THEN 'B'
      WHEN FRONT_END = 1 THEN 'C'
    END GRADE
  FROM DEVELOPERS_SKILL_PIVOT
)
SELECT -- GRADE가 NULL이 아닌 개발자의 GRADE, ID, EMAIL을 조회하고 GRADE, ID 기준으로 정렬
  GRADE,
  ID,
  EMAIL
FROM DEVELOPERS_GRADE
WHERE GRADE IS NOT NULL
ORDER BY GRADE, ID;

주의할 점

AI를 활용하여 쿼리에서 잘못된 점을 빨리 찾을 수 있는 점이 좋았고 앞으로도 잘 사용할 것 같다. 문제와 코드만 보고도 잘못될 가능성이 있는 부분을 찾아낼 수 있다. 실무에서 활용할때에는 프로그래머스처럼 문제가 없으니 가지고 있는 테이블과 원하는 결과를 정확히 말해주는것이 중요할 것 같다.

활용할 때 주의할 점도 있다고 생각한다. AI가 제시해준 답을 그대로 사용하는 것보다는 AI의 아이디어를 빌려서 자신만의 답으로 만드는 과정이 필요한 것 같다.