# 10진수의 수로 된 GENOTYPE를 2진수로 변경
SEELCT CONV(GENOTYPE, 10, 2) FROM TABLE;
2-1. SQL 코딩 테스트 연습
10진수로 이루어진 GENOTYPE을 2진수로 변경해서 자리수가 형질이 된다.
조건은 아래와 같다.
1. 2번 형질 보유하지 않으면서
2. 1이나 3번 형질을 보유하기.
순서1
우선 2진수로 변경 후 비트연산자로 2번 형질을 거리는게 가능한지 확인해보기로 했다.
SELECT CONV(GENOTYPE >> 1 , 10, 2) % 2 != 1 FROM ECOLI_DATA;

순서2
그럼 1이나 3번을 보유한다는 조건을 넣어서 조회해보자.
SELECT * FROM ECOLI_DATA
WHERE CONV(GENOTYPE >> 1 , 10, 2) % 2 != 1
AND (CONV(GENOTYPE , 10, 2) % 2 = 1
OR CONV(GENOTYPE >> 2, 10, 2) % 2 = 1) ;

순서3
좋아. 이제 그럼 최종적으로 출력되어야하는 쿼리를 넣고 다시 출력해보면 된다.
SELECT COUNT(*) AS COUNT FROM ECOLI_DATA
WHERE CONV(GENOTYPE >> 1 , 10, 2) % 2 != 1
AND (CONV(GENOTYPE , 10, 2) % 2 = 1
OR CONV(GENOTYPE >> 2, 10, 2) % 2 = 1);

2-2. OTHERS SOLUTION
&를 이용해서 1이 나오면 포함되어 있다는 뜻.SELECT
COUNT(*) AS COUNT
FROM
ECOLI_DATA
WHERE
(GENOTYPE & 2) = 0
AND
(GENOTYPE & 5) > 0;
# 0010(2)와 AND 비트연산해서 0 -> 2번 형질을 가지지 않아야 함
# 0101(2)와 AND 비트연산해서 1이상 -> 1번 혹은 3번 형질을 가졌다는 것
SQL 문제를 풀다가 아래와 같은 조건이 나왔다.
# 상위 0% ~ 25% 를 'CRITICAL',
# 26% ~ 50% 를 'HIGH',
# 51% ~ 75% 를 'MEDIUM',
# 76% ~ 100% 를 'LOW' 라고 분류합니다.
방법을 찾다가 발견한 함수.
NTILE()
#NTILE(몇 등급으로 나눌 지 숫자) OVER (ORDER BY 정렬할 컬럼 정렬방식)
NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC)
다시 조건으로 돌아가서 보면 25%씩 전체를 4등분으로 나누면 원하는 조건을 찾을 수 있었음.