ECOLI_DATA 테이블에서 2번 형질을 보유하지 않으면서 1번 또는 3번 형질을 보유하는 대장균의 수를 구하는 문제이다.
| 테이블 | 주요 컬럼 |
|---|---|
ECOLI_DATA | ID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE |
| 형질 | 비트값 |
|---|---|
| 1번 형질 | 1 (001) |
| 2번 형질 | 2 (010) |
| 3번 형질 | 4 (100) |
GENOTYPE = 13이면 1101이므로 1번, 3번, 4번 형질 보유를 의미한다.
특정 형질을 갖고 있는지 확인할 때는 비트 연산자 &를 사용한다. 연산 결과가 0이면 해당 형질이 없고, 0보다 크면 해당 형질이 있다.
GENOTYPE = 13 (1101) & 2 (0010) = 0 → 2번 형질 없음 ✅
GENOTYPE = 15 (1111) & 2 (0010) = 2 → 2번 형질 있음 ❌
조건을 SQL로 정리하면:
| 조건 | SQL |
|---|---|
| 1번 형질 보유 | GENOTYPE & 1 > 0 |
| 3번 형질 보유 | GENOTYPE & 4 > 0 |
| 2번 형질 미보유 | GENOTYPE & 2 = 0 |
구체적으로 정리한 풀이 흐름:
COUNT(*)로 조건에 맞는 행 수 집계GENOTYPE & 1 > 0 OR GENOTYPE & 4 > 0으로 1번 또는 3번 형질 보유 필터GENOTYPE & 2 = 0으로 2번 형질 미보유 필터SELECT COUNT(*) AS COUNT
FROM ECOLI_DATA
WHERE (GENOTYPE & 1 > 0 OR GENOTYPE & 4 > 0)
AND GENOTYPE & 2 = 0