목록전체 글 (180)
YataNox
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/rmiDW/btsHLvqvyIc/SV2yFIRulvr6sa1cQue1P0/img.png)
문제 MONTH를 활용해 분기 날짜에서 월 정보를 뽑아내어 분기를 결정한 데이터를 뽑아내고 해당 데이터를 ECOLI_DATA 테이블에 조인하여 그룹화하고 COUNT 메소드로 수를 센다. 코드WITH value AS (SELECT ID, CASE WHEN MONTH(DIFFERENTIATION_DATE) WHEN MONTH(DIFFERENTIATION_DATE) WHEN MONTH(DIFFERENTIATION_DATE) ELSE '4Q' END AS 'QUARTER' FROM ECOLI_DATA) SELECT value.QUARTER, COUNT(*) AS 'ECOLI_COUNT' FROM ECOLI_DATA ed JOIN value ON ed.ID = value.ID GRO..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bVMaZv/btsHHa7Myw7/KEd0ETDfuymQiHEwcfoqR0/img.png)
문제 부모 id를 기준으로 null이 아닌 값들을 그룹화한 테이블을 이용하여 문제를 풀이한다ECOLI_DATA에 해당 그룹화 테이블을 조인하고 COALESCE 함수를 통해 합한다.코드SELECT a.id, COALESCE(b.count, 0) AS CHILD_COUNT FROM ECOLI_DATA a LEFT JOIN ( SELECT parent_id, COUNT(*) AS COUNT FROM ECOLI_DATA GROUP BY parent_id HAVING parent_id IS NOT NULL ) b ON a.id = b.parent_id ORDER BY 1 ASC;
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bD84SU/btsHIvCQHSo/Si6RYSzdS9BWtwfa3kREwk/img.png)
문제 host_id를 기준으로 그룹화를 진행하고 값이 2 이상인 값만 모은 값의 host_id를 추출하고 host_id가 이 값들인 경우만 출력하면 된다.코드SELECT id, name, host_id FROM PLACES WHERE host_id in (SELECT host_id FROM PLACES GROUP BY host_id HAVING count(host_id) > 1) ORDER BY 1 ASC;
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bxLkLF/btsHHQHoh11/yceV3VK3zSCyYXAYasB620/img.png)
문제 percent_rank를 알고 있다면 쉽게 풀 수 있는 문제이다. 퍼센트로 랭크를 나눈 테이블을 기준으로 CASE문을 사용하여 풀었다.코드WITH value as (SELECT id, percent_rank() over (ORDER BY size_of_colony desc) as percent FROM ECOLI_DATA) SELECT id, CASE WHEN percent WHEN percent WHEN percent ELSE 'LOW' END as 'COLONY_NAME' FROM value ORDER BY 1 ASC;
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/QvCOt/btsHGfWftex/22uugFFHzuZWfHZ031ZKO0/img.png)
문제 CASE 문을 사용할 줄 안다면 매우 쉽게 풀 수 있는 문제이다.코드SELECT id, CASE WHEN size_of_colony > 1000 then 'HIGH' WHEN size_of_colony > 100 then 'MEDIUM' ELSE 'LOW' END as 'SIZE' FROM ECOLI_DATA ORDER BY 1 ASC;
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/NfHGy/btsHHstgqfq/cgsUhvMADG4srnCZiu4b2K/img.png)
문제 fish_type을 통해 두 테이블을 조인하고 fish_name을 기준으로 그룹화, 이후 count 함수를 써서 갯수를 카운트 한다.코드SELECT count(f.id) as fish_count, fn.fish_name as fish_name FROM FISH_INFO f JOIN FISH_NAME_INFO fn ON f.fish_type = fn.fish_type GROUP BY fn.fish_name ORDER BY 1 desc;
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/oHAU5/btsHHi5wqje/9fYjfmdrjIsuq9TftiwDt0/img.png)
문제LeftJoin과 형질이 2진수로 되어 있기에 &연산을 통해서 원하는 값을 찾는다.코드SELECT e.ID, e.GENOTYPE, ed.GENOTYPE AS PARENT_GENOTYPE FROM ECOLI_DATA e JOIN ECOLI_DATA ed ON e.PARENT_ID = ed.ID WHERE (e.GENOTYPE & ed.GENOTYPE) >= ed.GENOTYPE ORDER BY 1;