SELECT
강원도에 위치한 생산공장 목록 출력하기(Lv1)
문제 설명
문제
FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요. 이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요.
풀이
SELECT로 공장 ID, 공장 이름, 주소를 조회
WHERE에서 강원도를 지정하기 위해 LIKE문을 활용
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%';
SUM, MAX, MIN
잡은 물고기 중 가장 큰 물고기의 길이 구하기(Lv1)
문제 설명
문제
FISH_INFO 테이블에서 잡은 물고기 중 가장 큰 물고기의 길이를 'cm' 를 붙여 출력하는 SQL 문을 작성해주세요.
이 때 컬럼명은 'MAX_LENGTH' 로 지정해주세요.
풀이
SELECT에서 CONCAT을 활용하여 최대 길이에 'cm'를 붙여서 출력
해당 칼럼을 'MAX_LENGTH'로 지정
SELECT CONCAT(MAX(LENGTH), 'cm') AS 'MAX_LENGTH'
FROM FISH_INFO;
GROUP BY
자동차 대여 기록에서 대여중/대여 가능 여부 구분하기(Lv4)
문제 설명
문제
FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.
풀이
WITH에서 catergroy별 최대 가격을 조회하는 구문을 만들어둠
( 여기서 중요한점은 WHERE fp2.CATEGORY = fp1.CATEGORY 조건을 사용하여
fp1의 각 카테고리에 대해 최대 가격을 구함)
SELECT에서 CATEGORY, PRICE, PRODUCT_NAME를 조회
WHERE에서 '과자', '국', '김치', '식용유'만 조회하게 설정
ORDER BY에서 가격을 기준으로 내림차순 정렬
WITH MAX_PRICE AS (
SELECT CATEGORY, PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT fp1
WHERE PRICE = (
SELECT MAX(fp2.PRICE)
FROM FOOD_PRODUCT fp2
WHERE fp2.CATEGORY = fp1.CATEGORY
)
)
SELECT CATEGORY, PRICE, PRODUCT_NAME
FROM MAX_PRICE
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
ORDER BY PRICE DESC;
JOIN
상품별 오프라인 매출 구하기 (Lv2)
문제 설명
문제
PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.
풀이
SELECT에서 상품코드와 가격*판매량의 합계인 매출을 조회
JOIN에서 PRODUCT_ID를 기준으로 두 개의 테이블을 join
GROUP BY 에서 상품코드별로 그룹화
ORDER BY에서 매출액순 내림차순, 상품코드별 오름차순 정렬
SELECT P.PRODUCT_CODE , P.PRICE * SUM(OS.SALES_AMOUNT) SALES
FROM PRODUCT P
JOIN OFFLINE_SALE OS ON OS.PRODUCT_ID = P.PRODUCT_ID
GROUP BY P.PRODUCT_CODE
ORDER BY SALES DESC, P.PRODUCT_CODE ASC;
String, Date
자동차 평균 대여 기간 구하기(Lv2)
문제 설명
문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.
풀이
SELECT에서 CAR_ID와 평균대여기간을 조회
DATEDIFF함수의 경우 두 날짜의 차이를 계산함
ex) 04-01과 04-01을 DATEDIFF 함수에 넣으면 0이 나옴. 즉 하루를 빼주므로 +1을 해주어야 알맞은 값을 구함!
GROUP BY에서 CAR_ID로 그룹화
ORDER BY에서 평균대여기간으로 내림차순, CAR_ID로 내림차순 정렬
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1), 1) >=7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
'SQL > 프로그래머스' 카테고리의 다른 글
프로그래머스 | SQL 스터디 10 (2) | 2024.09.10 |
---|---|
프로그래머스 | JOIN - 없어진 기록 찾기 (+JOIN정리) (0) | 2024.09.10 |
프로그래머스 | SQL 스터디 8 (0) | 2024.09.03 |
프로그래머스 | SQL 스터디 7 (0) | 2024.09.03 |
프로그래머스 | SQL 스터디 6 (0) | 2024.09.03 |