[sql] DAY4 (프로그래머스 SQL 고득점 Kit)

ryz·2022년 10월 12일

프로그래머스 SQL

목록 보기
4/9
post-thumbnail

lv2. String, Date : DATETIME에서 DATE로 형 변환
ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜(시각(시-분-초)을 제외한 날짜(년-월-일)만 보여주세요. )를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다.

SELECT ANIMAL_ID, NAME,
DATE_FORMAT(DATETIME, '%Y-%m-%d') AS "날짜"
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID

/*
DATETIME형태는 DATE_FORMAT()함수를 통해 변환 가능함.
DATE_FORMAT(컬럼명, "표현 형식")

자세한 사항은 https://kig6022.tistory.com/7
*/

lv2. SUM, MAX, MIN : 가격이 제일 비싼 식품의 정보 출력하기
FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요.

SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT 
WHERE PRICE = (SELECT MAX (PRICE) FROM FOOD_PRODUCT)

#항상 헷갈리는데... sql은 ==이 아니라 =이다.

lv2. SUM, MAX, MIN : 동물 수 구하기
동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL 문을 작성해주세요.

SELECT COUNT (*) FROM ANIMAL_INS

lv2. SELECT : 3월에 태어난 여성 회원 목록 출력하기
MEMBER_PROFILE 테이블에서 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고, 결과는 회원ID를 기준으로 오름차순 정렬해주세요.

SELECT MEMBER_ID, MEMBER_NAME, GENDER,
DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') DATE_OF_BIRTH
FROM MEMBER_PROFILE 
WHERE GENDER = "W"
AND DATE_FORMAT(DATE_OF_BIRTH, '%m') = "03"
AND TLNO IS NOT NULL
ORDER BY MEMBER_ID

/*문제를 꼼꼼히 읽지 못해 실수하는 경우가 있다.
이 문제에서는 여성만 조회하라는 부분을 놓쳤었다.
조건을 꼼꼼히 보는 습관을 기르자.*/

lv2. String, Date : 카테고리 별 상품 개수 구하기
PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.

SELECT LEFT (PRODUCT_CODE, 2) AS CATEGORY,
COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY CATEGORY
ORDER BY PRODUCT_CODE

/*
문자열 자르기 함수

SUBSTRING(문자열, 시작위치, 길이) : 지정한 위치에서 지정한 문자열 길이만큼 자르기
LEFT(문자열, 길이) : 왼쪽에서부터 지정한 문자열의 길이만큼 자르기
RIGHT(문자열, 길이) : 오른쪽에서부터 지정한 문자열의 길이만큼 자르기
*/

lv2. GROUP BY : 가격대 별 상품 개수 구하기
PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.

SELECT
CASE
    WHEN PRICE >=0 AND PRICE < 10000 THEN 0
    WHEN PRICE >=10000 AND PRICE < 20000 THEN 10000
    WHEN PRICE >=20000 AND PRICE < 30000 THEN 20000
    WHEN PRICE >=30000 AND PRICE < 40000 THEN 30000
    WHEN PRICE >=40000 AND PRICE < 50000 THEN 40000
    WHEN PRICE >=50000 AND PRICE < 60000 THEN 50000
    WHEN PRICE >=60000 AND PRICE < 70000 THEN 60000
    WHEN PRICE >=70000 AND PRICE < 80000 THEN 70000
    WHEN PRICE >=80000 THEN 80000
END AS 'PRICE_GROUP',
COUNT(*) AS PRODUCTS
FROM PRODUCT 
GROUP BY PRICE_GROUP
ORDER BY PRICE

#코드가 너무 긴 것 같은데 더 깔끔하게 만들 방법이 없을까...

0개의 댓글