[mysql] 부모의 형질을 모두 가지는 대장균 찾기
CONV(100, 10, 2)
10진수의 100을 2진수로 표기하는 함수
select A.ID as ID, CONV(A.GENOTYPE,10,2) , CONV(B.GENOTYPE,10,2) from ECOLI_DATA A left join ECOLI_DATA B on A.PARENT_ID = B.ID
order by A.ID ;
A 가 B의 형질을 모두가지는걸 어떻게 비교해야될지 고민해 봤는데
반복문을 써야하나..?
형질을 가지고있다는건 1이라는뜻이고
둘다 같은 형질을 가진다는 의미는 같은 위치에 1이 존재한다는거니까
두개를 그냥 뺴봤다.
다음과 같이 부모의 형질을 모두 가지는 경우 1 과 0 으로만 표기되고 문자열의 길이(자릿수)도 변화가 없는것을 알 수 있다.
예외 상황
자식 : 110
부모 : 1
빼더라도 109 자릿수 변화없음
-> 따라서 9를 가지지 않는걸로 변경
-> 1가지 테스트에서 실패
예외 상황
부모의 형질이 10 이고 자식이 0 이거나 1 이라면 -10 , -9 등이 나오며
문제의 요구 조건상 자식의 형질이 최소 부모보다 크거나 같아야 하다고 판단하여
and 조건을 추가
결론
select A.ID as ID, A.GENOTYPE as GENOTYPE , B.GENOTYPE as PARENT_GENOTYPE
from ECOLI_DATA A join ECOLI_DATA B on A.PARENT_ID = B.ID
where Locate(9, (CONV(A.GENOTYPE,10,2) - CONV(B.GENOTYPE,10,2))) = 0
and A.GENOTYPE >= B.GENOTYPE
order by A.ID asc;