SQL Coding Test 14

[Programmers] 대장균의 크기에 따라 분류하기 2 (Lv.3)

🔗 문제 link : https://school.programmers.co.kr/learn/courses/30/lessons/301649🖥️ 문제 풀이SELECT ID, CASE NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC) WHEN 1 THEN 'CRITICAL' WHEN 2 THEN 'HIGH' WHEN 3 THEN 'MEDIUM' WHEN 4 THEN 'LOW' END AS COLONY_NAMEFROM ECOLI_DATAORDER BY ID ASC;💡 문제 해결NTILE(n) 함수란 데이터를 정렬한 후 n개의 그룹으로 균등하게 나누고, 각 행에 그룹 번호를 ..

[Programmers] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (Lv.3)

🔗 문제 link : https://school.programmers.co.kr/learn/courses/30/lessons/157340🖥️ 문제 풀이SELECT CAR_ID, CASE WHEN CAR_ID IN ( SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE = '2022-10-16' ) THEN '대여중' ELSE '대여 가능' END AS AVAILABILITYFROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_IDORDER BY CAR_ID DESC;💡 문제 해..

[Programmers] 조건에 맞는 사용자 정보 조회하기 (Lv.3)

🔗 문제 link : https://school.programmers.co.kr/learn/courses/30/lessons/164670🖥️ 문제 풀이SELECT U.USER_ID, U.NICKNAME, CONCAT(U.CITY, ' ', U.STREET_ADDRESS1, ' ', U.STREET_ADDRESS2) AS '전체주소', CONCAT( SUBSTR(U.TLNO, 1, 3), '-', SUBSTR(U.TLNO, 4, 4), '-', SUBSTR(U.TLNO, 8, 4) ) AS '전화번호'FROM USED_GOODS_BOARD BJOIN USED_GOODS_USER U ON B.WRITER_ID = U.USER_IDGROUP ..

[Programmers] 오랜 기간 보호한 동물(2) (Lv.3)

🔗 문제 link : https://school.programmers.co.kr/learn/courses/30/lessons/59411🖥️ 문제 풀이SELECT I.ANIMAL_ID, I.NAMEFROM ANIMAL_INS IJOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_IDORDER BY DATEDIFF(O.DATETIME, I.DATETIME) DESCLIMIT 2;💡 문제 해결놓친 부분1. LEFT JOIN + IS NOT NULL → INNER JOIN입양 간 동물만 필요하다면LEFT JOIN ... WHERE O.ANIMAL_ID IS NOT NULL 보다JOIN ... 이 더 간단하고 같은 결과가 나옴❌ 잘못 생각한 방향HAVING DATEDI..

[Programmers] 조건에 맞는 개발자 찾기 (Lv.2)

🔗 문제 link : https://school.programmers.co.kr/learn/courses/30/lessons/276034🖥️ 문제 풀이SELECT DISTINCT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAMEFROM SKILLCODES SJOIN DEVELOPERS D ON S.CODE & D.SKILL_CODE = S.CODEWHERE S.NAME IN ('Python', 'C#')ORDER BY D.ID ASC;💡 문제 해결S.CODE & D.SKILL_CODE = S.CODE 뜻SKILL_CODE는 여러 스킬을 더한 값으로 저장됨예:Python = 256 → 100000000Java = 128 → 010000000JS..

[Programmers] 연도별 대장균 크기의 편차 구하기 (Lv.2)

🔗 문제 link : https://school.programmers.co.kr/learn/courses/30/lessons/299310🖥️ 문제 풀이SELECT YEAR(DIFFERENTIATION_DATE) AS YEAR, MAX(SIZE_OF_COLONY) OVER (PARTITION BY YEAR(DIFFERENTIATION_DATE)) - SIZE_OF_COLONY AS YEAR_DEV, IDFROM ECOLI_DATAORDER BY YEAR ASC, YEAR_DEV ASC;💡 문제 해결윈도우 함수(Window Function)란?: 윈도우 함수는 행을 유지한 채 그룹별 계산 결과를 추가하는 함수GROUP BY 처럼 그룹으로 묶어 계산하지만, 행 수가 줄어들지 않음기본 문법..

[Programmers] 업그레이드 된 아이템 구하기 (Lv.2)

🔗 문제 link : https://school.programmers.co.kr/learn/courses/30/lessons/273711🖥️ 문제 풀이SELECT I.ITEM_ID, I.ITEM_NAME, I.RARITYFROM ITEM_INFO IJOIN ITEM_TREE T ON I.ITEM_ID = T.ITEM_IDWHERE T.PARENT_ITEM_ID IN ( SELECT ITEM_ID FROM ITEM_INFO WHERE RARITY = 'RARE')ORDER BY I.ITEM_ID DESC;💡 문제 해결서브쿼리 IN을 사용한 이유: RARE 아이템 ID가 여러 개일 수 있기 때문예:RARE = 0,1,3,4 하나만 비교:= 여러 개 비교:IN (...) 사용서브쿼리로 ..

[Programmers] 가격대 별 상품 개수 구하기 (Lv.2)

🔗 문제 link : https://school.programmers.co.kr/learn/courses/30/lessons/131530🖥️ 문제 풀이SELECT FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP, COUNT(*) AS PRODUCTSFROM PRODUCTGROUP BY FLOOR(PRICE / 10000) * 10000ORDER BY PRICE_GROUP ASC;💡 문제 해결FLOOR()은 소수점 이하를 버리고 가장 가까운 작은 정수를 반환하는 내림 함수기본 문법:FLOOR(숫자) 예:SELECT FLOOR(1.8); 결과:1 SELECT FLOOR(2.99); 결과:2

[Programmers] 카테고리 별 상품 개수 구하기 (Lv.2)

🔗 문제 link : https://school.programmers.co.kr/learn/courses/30/lessons/131529🖥️ 문제 풀이SELECT LEFT(PRODUCT_CODE, 2) AS CATEGORY, COUNT(PRODUCT_ID) AS PRODUCTSFROM PRODUCTGROUP BY LEFT(PRODUCT_CODE, 2)ORDER BY CATEGORY ASC;💡문제 해결LEFT()는 문자열의 왼쪽 N개 문자를 가져오는 문자열 추출 함수기본 문법:LEFT(컬럼명, 개수)COUNT()는 데이터 개수를 계산하는 집계 함수기본 문법:COUNT(컬럼) COUNT 종류 차이COUNT(*)→ 전체 행 개수 COUNT(COLUMN)→ NULL 제외 개수