문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
MySQL의 비트 연산
MySQL에서도 비트 연산을 똑같이 지원한다.
&, |, ^와 같은 비트 연산들을 모두 지원한다.
그래서 비트로 값을 관리하는 것들의 포함관계를 &를 통해서 단순하게 해결할 수 있다.
포함관계 확인하기


위 처럼 테이블을 구해야 할 때, Front-end 개발자를 찾아야 한다.
그렇다면 SKILL_CODE에 Front End가 포함되어 있는지 확인해야 한다.
비트는 고유하기 때문에 Front End를 그냥 그대로 더해버리고
&연산을 통해서 해결할 수 있다.
SELECT
ID,
EMAIL,
FIRST_NAME,
LAST_NAME
FROM
DEVELOPERS
WHERE
SKILL_CODE & (
SELECT SUM(CODE)
FROM SKILLCODES
WHERE CATEGORY = 'Front End'
)
ORDER BY
ID
WITH으로 복잡한 쿼리와 함께 해결하기
여러가지 CODE의 합을 만들어야 하는 경우
WITH으로 보조 테이블을 만들어서 쉽게해결 할 수 있다.
WITH front AS (
SELECT SUM(CODE) AS CODE
FROM SKILLCODES
WHERE CATEGORY = 'Front End'
)
SELECT
*
FROM
(
SELECT
(CASE
WHEN (SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python'))
AND (SKILL_CODE & (SELECT CODE FROM front)) THEN 'A'
WHEN (SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')) THEN 'B'
WHEN (SKILL_CODE & (SELECT CODE FROM front)) THEN 'C'
ELSE NULL
END) AS GRADE,
ID,
EMAIL
FROM
DEVELOPERS
) AS a
WHERE
GRADE IS NOT NULL
ORDER BY
GRADE,
ID
피드백
WITH은 한 번만 호출하고, (,)를 이용하여 여러 개를 달 수 있다.
별칭은 WHERE에서 사용할 수 없다. 보조 쿼리로 만들고 한번 감싸서 추가 필터링을 해주면 해결 된다.
'프로그래밍 언어 > MySQL' 카테고리의 다른 글
특정 단위로 테이블 만들기 (0) | 2024.02.21 |
---|---|
Where In 활용하기 (0) | 2024.02.14 |
서브 테이블로 복잡한 쿼리 풀기 (0) | 2024.02.11 |
서브 쿼리로 데이터 끼워 넣기 (0) | 2024.02.11 |
SQL 코딩 테스트 훈련 (0) | 2024.02.08 |
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
MySQL의 비트 연산
MySQL에서도 비트 연산을 똑같이 지원한다.
&, |, ^와 같은 비트 연산들을 모두 지원한다.
그래서 비트로 값을 관리하는 것들의 포함관계를 &를 통해서 단순하게 해결할 수 있다.
포함관계 확인하기


위 처럼 테이블을 구해야 할 때, Front-end 개발자를 찾아야 한다.
그렇다면 SKILL_CODE에 Front End가 포함되어 있는지 확인해야 한다.
비트는 고유하기 때문에 Front End를 그냥 그대로 더해버리고
&연산을 통해서 해결할 수 있다.
SELECT
ID,
EMAIL,
FIRST_NAME,
LAST_NAME
FROM
DEVELOPERS
WHERE
SKILL_CODE & (
SELECT SUM(CODE)
FROM SKILLCODES
WHERE CATEGORY = 'Front End'
)
ORDER BY
ID
WITH으로 복잡한 쿼리와 함께 해결하기
여러가지 CODE의 합을 만들어야 하는 경우
WITH으로 보조 테이블을 만들어서 쉽게해결 할 수 있다.
WITH front AS (
SELECT SUM(CODE) AS CODE
FROM SKILLCODES
WHERE CATEGORY = 'Front End'
)
SELECT
*
FROM
(
SELECT
(CASE
WHEN (SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python'))
AND (SKILL_CODE & (SELECT CODE FROM front)) THEN 'A'
WHEN (SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')) THEN 'B'
WHEN (SKILL_CODE & (SELECT CODE FROM front)) THEN 'C'
ELSE NULL
END) AS GRADE,
ID,
EMAIL
FROM
DEVELOPERS
) AS a
WHERE
GRADE IS NOT NULL
ORDER BY
GRADE,
ID
피드백
WITH은 한 번만 호출하고, (,)를 이용하여 여러 개를 달 수 있다.
별칭은 WHERE에서 사용할 수 없다. 보조 쿼리로 만들고 한번 감싸서 추가 필터링을 해주면 해결 된다.
'프로그래밍 언어 > MySQL' 카테고리의 다른 글
특정 단위로 테이블 만들기 (0) | 2024.02.21 |
---|---|
Where In 활용하기 (0) | 2024.02.14 |
서브 테이블로 복잡한 쿼리 풀기 (0) | 2024.02.11 |
서브 쿼리로 데이터 끼워 넣기 (0) | 2024.02.11 |
SQL 코딩 테스트 훈련 (0) | 2024.02.08 |