오늘의 문제!
프로그래머스 sql - select - 대장균 문제들
SELECT COUNT(ID) AS COUNT
FROM ECOLI_DATA
WHERE (GENOTYPE & 2) = 0
AND ((GENOTYPE & 1) > 0 OR (GENOTYPE & 4) > 0);
SELECT D1.ID, D1.GENOTYPE, D2.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA D1 JOIN ECOLI_DATA D2
ON D1.PARENT_ID = D2.ID -- 1. 부모-자식 관계 연결
WHERE (D1.GENOTYPE & D2.GENOTYPE) = D2.GENOTYPE -- 2. 자식이 부모의 형질을 모두 가졌는지 확인
ORDER BY D1.ID ASC;
SELECT D1.ID, COUNT(D2.ID) AS CHILD_COUNT
FROM ECOLI_DATA D1 LEFT JOIN ECOLI_DATA D2
ON D1.ID = D2.PARENT_ID
GROUP BY D1.ID
ORDER BY D1.ID ASC;
SELECT ID,
CASE
WHEN SIZE_OF_COLONY <= 100 THEN 'LOW'
WHEN SIZE_OF_COLONY <= 1000 THEN 'MEDIUM'
ELSE 'HIGH'
END AS SIZE
FROM ECOLI_DATA
ORDER BY ID ASC;
SELECT ID,
CASE
WHEN NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC) = 1 THEN 'CRITICAL'
WHEN NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC) = 2 THEN 'HIGH'
WHEN NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC) = 3 THEN 'MEDIUM'
ELSE 'LOW'
END AS COLONY_NAME
FROM ECOLI_DATA
ORDER BY ID ASC;
<알았는데 까먹었던 것>
SELECT 절에서 CASE - WHEN - THEN - ELSE - END 를 사용해서 분기를 나눌 수 있었다는것.
COUNT같은 집계함수를 쓰려면 GROUP BY도 사용해야 할때가 있다는 것.
<아예 새로 알게된 것>
윈도우 함수. (개별 행은 유지하면서 GROUP BY 같은 효과를 내고 싶을 때 쓰는 것. OVER가 뒤에 무조건 붙어야 한다.)
NTILE(n) OVER (조건) = 1~n -> 전체 데이터를 조건에 맞게 n개의 정확한 등분으로 나눌 때 쓰는 함수.
어우 모르는게 너무 많다.. SQLD 빡세다 빡세!!
얘네 2문제는 내일 풀어보는걸로!