[SQL] 연습

[SQL] 프로그래머스 특정 형질을 가지는 대장균 찾기

Simon Yoon 2024. 8. 17. 22:48

문제: 2번 형질을 보유하지 않으면서 1번이나 3번 형질을 보유하고 있는 대장균 개체 수(COUNT)를 출력

 

해결방법:

1. ECOLI_DATA 테이블의 GENOTYPE 컬럼이 10진수이므로 CONV() 함수를 사용해서 2진수로 변환

2. 이렇게 2진수로 변환한 GENOTYPE 은 뒤에서부터 1번, 2번, 3번 형질... 순으로 있으면 1로 표현된다

3. 따라서 SUBSTRING() 함수를 사용하여 변환된 GENOTYPE 열의 -2번째 인덱스의 값이 1이 아니고(2번 형질을 보유하지 않음), 해당 열의 -1번째 또는 -3번째 인덱스의 값이 1인 행만 COUNT하면 된다.

 

코드 예시

SELECT COUNT(*) AS COUNT
FROM ECOLI_DATA
WHERE
    NOT SUBSTRING(CONV(GENOTYPE, 10, 2), -2, 1) = 1 
    AND (SUBSTRING(CONV(GENOTYPE, 10, 2), -1, 1) = 1
        OR
         SUBSTRING(CONV(GENOTYPE, 10, 2), -3, 1) = 1)
;