[ 2024.06.30 ] TIL

yy·2024년 6월 30일

개발일지

목록 보기
76/122
  1. SQL 진수 변경 CONV()
# 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

  • AND 비트연산자 &를 이용해서 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번 형질을 가졌다는 것




  1. SQL 상위 몇 프로 - NTILE()

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등분으로 나누면 원하는 조건을 찾을 수 있었음.

profile
시간이 걸릴 뿐 내가 못할 건 없다.

0개의 댓글