본문 바로가기
SQL

프로그래머스 SQL 고득점 Kit - SELECT[3]

by 오리파 2026. 2. 8.

 

1. 특정 형질을 가지는 대장균 찾기

- 2진수로 바꾸는 함수 : BIN(컬럼명) 

- 2진수로 바꾼 후 특정 자리수에 있는 숫자를 확인하고 싶은 경우, BIN()을 사용하지 않고 비트연산을 통해 사용

** 비트연산 **

GENOTYPE & 2 <> 0 --오른쪽에서 두 번째 자리수 확인할 때
GENOTYPE & 8 <> 0 --오른쪽에서 세 번째 자리수 확인할 때
GENOTYPE & 16 <> 0 --오른쪽에서 네 번째 자리수 확인할 때

- 2진수로 바꿨을 때 k번째 자리수가 1이면 결과값이 2^(k-1)로 나온다 = 해당 자리수가 1이면 비트연산한 값 그대로 나오거나 0이 나옴

-> GENOTYPE & 2 의 결과 : 2 or 0

-> GENOTYPE & 8 의 결과 : 8 or 0

-> GENOTYPE & 16 의 결과 : 16 or 0

SELECT COUNT(*) AS COUNT FROM ECOLI_DATA
WHERE GENOTYPE & 2 =0 AND (GENOTYPE & 1 <>0 OR GENOTYPE & 4<>0);

 

 

 

2. 부모의 형질을 모두 가지는 대장균 찾기

- 부모의 형질과 비교해서 전부 다 가지고 있으면 0 이 아닐테니, 자식 형질 & 부모 형질 = 부모 형질 로 조건 걸어서 해결

SELECT c.ID, c.GENOTYPE AS GENOTYPE, p.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA p JOIN ECOLI_DATA c
ON p.ID = c.PARENT_ID 
WHERE c.GENOTYPE & p.GENOTYPE = p.GENOTYPE
ORDER BY c.ID;

- 부모가 없는 개체들은 자연스럽게 JOIN 과정에서 제외!