[ 프로그래머스 / SQL ] 없어진 기록 찾기
·
CS & Algorithm
문제 파악https://school.programmers.co.kr/learn/courses/30/lessons/59042입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 조회하는 문제다.정렬 기준은 ID 오름차순이다.핵심은 단순 조인이 아니라, “한 테이블에는 존재하고 다른 테이블에는 존재하지 않는 데이터”를 찾는 문제라는 점이었다.접근 방법처음에는 LEFT JOIN을 쓰긴 했는데, 조건을 반대로 걸어서 틀렸다.입양 기록이 있는 테이블은 ANIMAL_OUTS입소 기록이 있는 테이블은 ANIMAL_INS 문제 조건을 정확히 풀어보면 이렇게 된다.입양 기록은 반드시 있어야 한다.입소 기록은 존재하면 안 된다.그러면 기준 테이블은 ANIMAL_OUTS가 된다.그리고 ANIMAL_I..
[ 프로그래머스 / SQL ] 부서별 평균 연봉 조회하기 (CEIL, ROUND, TRUNC 차이)
·
CS & Algorithm
문제 파악부서별 평균 연봉을 구하고, 이를 기준으로 내림차순 정렬하는 문제다.출력 컬럼은 DEPT_ID, DEPT_NAME_EN, 평균 연봉이며 평균 연봉은 소수점 첫째 자리에서 반올림해야 한다. 처음에는 단순히 AVG로 평균을 구하고 CEIL을 사용했다.하지만 조건을 다시 보니 핵심은 “반올림”이었다.접근 방법부서별 평균이므로 HR_EMPLOYEES에서 DEPT_ID 기준으로 GROUP BY를 수행했다.AVG(SAL)로 평균을 구한 뒤 서브쿼리에서 부서별 평균을 먼저 계산했다. 이후 HR_DEPARTMENT와 JOIN하여 부서 영문명을 가져왔다.정렬은 최종 결과에서 AVG_SAL 기준으로 내림차순 처리했다. 처음에는 CEIL(AVG(SAL))을 사용했다.CEIL은 무조건 올림이기 때문에 소수점이 조금이..
[ 프로그래머스 / SQL ] 물고기 종류 별 대어 찾기
·
CS & Algorithm
문제 파악https://school.programmers.co.kr/learn/courses/30/lessons/XXXX물고기 종류별로 가장 길이가 긴 물고기의 ID, 이름(FISH_NAME), 길이를 구하는 문제였다.단순히 MAX(LENGTH)를 구하는 문제가 아니라,“그 최대 길이를 가진 실제 행의 ID”까지 같이 가져와야 하는 문제였다. 처음에는 GROUP BY로 묶고 MAX만 구하면 될 줄 알았다.그런데 집계 결과와 원본 행의 컬럼(ID)을 같이 가져오는 순간부터 쿼리가 꼬이기 시작했다.핵심은 집계 결과와 실제 행을 어떻게 연결하느냐였다. 접근 방법처음에는 아래처럼 작성했다.GROUP BY FISH_TYPESELECT ID, MAX(LENGTH) 하지만 GROUP BY를 하면 집계되지 않은 ID는..
[ 프로그래머스 / Java ] 대장균의 크기에 따라 분류하기 2
·
CS & Algorithm
문제 파악https://school.programmers.co.kr/learn/courses/30/lessons/301650대장균의 크기를 기준으로 상위 25%씩 4구간으로 나누는 문제다.SIZE_OF_COLONY를 기준으로 내림차순 정렬했을 때,상위 25% → CRITICAL상위 50% → HIGH상위 75% → MEDIUM나머지 → LOW로 분류해서 ID와 함께 반환하면 된다. 처음에는 단순히 COUNT(*) / 4로 구간을 나누면 되겠다고 생각했다.하지만, 개수만으로는 각 행이 어느 구간에 속하는지 판단할 수 없다는 점을 깨달았다.핵심은 “전체 중 몇 번째인지”를 알아야 한다는 것이었다.이 문제는 단순 집계 문제가 아니라, 각 행의 순위와 전체 개수를 동시에 활용하는 윈도우 함수 문제였다. 접근 방..
[ 프로그래머스 / SQL ] 특정 조건을 만족하는 물고기별 수와 최대 길이 구하기
·
CS & Algorithm
문제 파악https://school.programmers.co.kr/learn/courses/30/lessons/298519 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krFISH_INFO 테이블에서 평균 길이가 33cm 이상인 물고기들을 종류별로 분류해서 다음을 구하는 문제였다.물고기 종류 (FISH_TYPE)잡은 수 (FISH_COUNT)최대 길이 (MAX_LENGTH)그리고 중요한 조건이 하나 있었다.10cm 이하의 물고기는 10cm로 취급해서 평균을 구하라여기서 LENGTH가 10cm 이하이면 NULL로 저장된다는 점이 핵심이었다. 접근 방법처음에는 LENGTH >= 33으로 WHERE를 걸어버렸다.그런데..
[프로그래머스 / SQL] 가격대 별 상품 개수 구하기
·
CS & Algorithm
문제 파악 프로그래머스의 “상품 별 오프라인 매출 구하기” 문제는상품 테이블(PRODUCT)과 오프라인 판매 테이블(OFFLINE_SALE)을 활용해 상품별 총 매출액을 구하는 문제다. PRODUCT 테이블에는 상품 ID(PRODUCT_ID), 상품 코드(PRODUCT_CODE), 가격(PRICE) 정보가 있다.OFFLINE_SALE 테이블에는 상품 ID(PRODUCT_ID), 판매량(SALES_AMOUNT) 정보가 있다. 매출액은 PRICE * SALES_AMOUNT 의 합으로 계산해야 하며,출력은 PRODUCT_CODE, SALES(총 매출액) 컬럼으로 구성해야 한다. 정렬 조건은 다음과 같다. 매출액(SALES) 내림차순매출액이 같으면 PRODUCT_CODE 오름차순 접근 방법 1. 매출액은 가격..