SQL 고득점 Kit - 8.1

김동현·2024년 8월 1일

SQL 고득점 Kit

목록 보기
13/56

SELCET - 조건에 맞는 개발자 찾기

문제

DEVELOPERS 테이블에서 Python이나 C# 스킬을 가진 개발자의 정보를 조회하려 합니다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.

결과는 ID를 기준으로 오름차순 정렬해 주세요.

https://school.programmers.co.kr/learn/courses/30/lessons/276034

1차 풀이

SELECT *, BIN(d.SKILL_CODE) & BIN(s.CODE)
FROM SKILLCODES s
CROSS JOIN
DEVELOPERS d

리뷰

  • 해당 문제를 풀기 위해 여러 가지 방법을 생각했다.
    이진으로 만들고
  1. 뺄셈 - 999 등 딱 떨어지는 숫자가 나오지 않는다. (큰 수부터 빼는데 음수가 되면 그 다음 수로 빼면 가능할 것 같은데 방법을 모르겠다. 대신 이진이 아닌 십진수로 계산)

  2. 나누기 - 숫자의 자리수로 인해 원하는 결과가 나오지 않는다. ❌

  3. 몫 - 기존보다 큰 숫자는 0으로 떨어져서 큰 수부터 진행하면 가능할 수도? (sql쿼리로 작성하는 방법을 모르겠음)

  4. 문자열 - 문자열로 바꿔서 위치에 존재하는 것으로 빠르게 탐색하고자 함 (이것도 1100 에서 1000을 찾으려고 LIKE를 사용하면 1100이라는 100 때문에 동일한 문자가 없어 판단을 못하는 문제 발생... 이게 제일 빠르게 연산할 것 같았는데...) ❌

  • 총 1시간 30분을 투자 했는데 못 풀었다.. 나중에 풀거나 사람들이 어떻게 풀었는지 보고 풀어봐야겠음

2차 풀이

# python or c# 이진
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE & (SELECT sum(code) ## 비트 연산을 십진수에서 바로 진행할 수 있다.
                    FROM SKILLCODES
                    WHERE NAME IN ('Python', 'C#'))
ORDER BY ID

리뷰

  • 앞에 생각했던 것은 다 아니었고 비트 연산으로 파이썬과 C#이 둘 다 1인 값만 출력하는 것이다.
  • 그래서 비트 연산을 진행할 때 CAST(expr AS type), CONV(code, 2, 10) 등 변환을 하고 연산을 했는데 이상한 값이 나왔다. 알고 보니 비트 연산을 알아서 2진수로 바꿔서 연산하는 것이었다......(어쩐지 값이 계속 이상해서 문자열로 변환된다는 거 보고 다시 이진으로 바꿔서 연산했는데 그대로더라..)
  • 계속 풀다가 비트 연산이 이상해서 다른 블로그를 참고해서 풀었다. 결국 참고한 블로그와 동일한 코드가 나오는데 이것을 내가 풀었다고 해야 할지 모르겠다. ㅎㅎ;

GitHub

https://github.com/lasentia/SQL_Study/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/2/276034.%E2%80%85%EC%A1%B0%EA%B1%B4%EC%97%90%E2%80%85%EB%A7%9E%EB%8A%94%E2%80%85%EA%B0%9C%EB%B0%9C%EC%9E%90%E2%80%85%EC%B0%BE%EA%B8%B0

profile
'The best way to get started is to quit talking and begin doing.'

0개의 댓글