STUDY ✏️

프로그래머스 SQL 문제풀이 - Lv.4

더하기plus 2022. 10. 9. 23:39

가족이 코딩공부 할 때

나는 SQL 문제풀이를 해보는 것으로..

 

난 전공자 짬바 회사 근속 짬바가 있으니까 4레벨만 풀었다 사실 다 풀기엔 귀찮음

인증샷

 

보호소에서 중성화한 동물

https://school.programmers.co.kr/learn/courses/30/lessons/59045

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

⚠ 답변을 보고 싶지 않은 사람을 위해서 가림.

쿼리를 보고 싶은 분만 [더보기]를 클릭하세요

 

더보기
SELECT
    i.ANIMAL_ID, # 아이디
    i.ANIMAL_TYPE, # 생물 종
    i.NAME # 이름
FROM ANIMAL_INS i
INNER JOIN ANIMAL_OUTS o
    ON i.ANIMAL_ID = o.ANIMAL_ID
    and i.SEX_UPON_INTAKE like 'Intact%' # 들어올 땐 중성화하지 않음
    and (o.SEX_UPON_OUTCOME like 'Spayed%'
        or o.SEX_UPON_OUTCOME like 'Neutered%')  #나갈 땐 중성화
    /* 중성화를 거치지 않은 동물은 성별 및 중성화 여부에 Intact, 
        중성화를 거친 동물은 Spayed 또는 Neutered라고 표시되어있습니다.*/
ORDER BY i.ANIMAL_ID # id 순으로 정렬

 

 

입양 시각 구하기(2)

https://school.programmers.co.kr/learn/courses/30/lessons/59413

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

⚠ 답변을 보고 싶지 않은 사람을 위해서 가림.
쿼리를 보고 싶은 분만 [더보기]를 클릭하세요

더보기
WITH rawdata AS (
    SELECT
        DATE_FORMAT(DATETIME,'%H')*1 AS `HOUR`, #입양일 시간 - string에서 number type 으로 변환
        COUNT(distinct ANIMAL_ID) AS `COUNT`
    FROM ANIMAL_OUTS 
    GROUP BY HOUR
), timedata AS ( # 24시간 빈 시간대 기록을 위한 테이블 생성
    SELECT *
    FROM (
        SELECT
            ROW_NUMBER() OVER(ORDER BY ANIMAL_ID DESC)-1 as `HOUR`
        FROM ANIMAL_OUTS
        )t
    WHERE HOUR < 24
)

SELECT t.hour, 
	IFNULL(r.count,0) as COUNT
FROM timedata t
LEFT JOIN rawdata r
    ON t.hour=r.hour
ORDER BY HOUR

 

 

우유와 요거트가 담긴 장바구니

https://school.programmers.co.kr/learn/courses/30/lessons/62284

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

⚠ 답변을 보고 싶지 않은 사람을 위해서 가림.
쿼리를 보고 싶은 분만 [더보기]를 클릭하세요

 

더보기
SELECT 
    CART_ID
FROM (
    SELECT
        CART_ID, 
        COUNT(IF(NAME = "Milk", ID, null)) as cnt_buy_milk,
        COUNT(IF(NAME = "Yogurt", ID, null)) as cnt_buy_yogurt
    FROM CART_PRODUCTS 
    GROUP BY CART_ID
    HAVING cnt_buy_milk * cnt_buy_yogurt > 0 # 우유와 요거트가 다 양수인 케이스만 필터링
)t
ORDER BY CART_ID # 장바구니 아이디순

 

 

식품분류별 가장 비싼 식품의 정보 조회하기

https://school.programmers.co.kr/learn/courses/30/lessons/131116

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

⚠ 답변을 보고 싶지 않은 사람을 위해서 가림.
쿼리를 보고 싶은 분만 [더보기]를 클릭하세요

 

더보기

 

SELECT
    CATEGORY,
    PRICE AS MAX_PRICE,
    PRODUCT_NAME
FROM (
    SELECT
        PRODUCT_NAME, 
        PRODUCT_CD, 
        CATEGORY, 
        PRICE,
        RANK() OVER (PARTITION BY CATEGORY ORDER BY PRICE DESC) as rank_num # 식품분류별 가격 순위 (내림차순)
    FROM FOOD_PRODUCT 
    WHERE
        CATEGORY in ('과자', '국', '김치', '식용유') # 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력
    ORDER BY CATEGORY, PRICE DESC
)t
WHERE
    rank_num = 1 # 식품분류별 가격순위(내림차순)이 1인 것만 필터링
ORDER BY MAX_PRICE DESC # 식품 가격을 기준으로 내림차순 정렬

 

 

5월 식품들의 총매출 조회하기

https://school.programmers.co.kr/learn/courses/30/lessons/131117

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

⚠ 답변을 보고 싶지 않은 사람을 위해서 가림.
쿼리를 보고 싶은 분만 [더보기]를 클릭하세요

 

더보기
SELECT 
    p.PRODUCT_ID,
    p.PRODUCT_NAME,
    SUM(AMOUNT*PRICE) AS TOTAL_SALES # 총매출 계산 : 판매량 * 식품가격
FROM FOOD_PRODUCT p
INNER JOIN FOOD_ORDER o
ON 
    p.PRODUCT_ID = o.PRODUCT_ID
    AND DATE_FORMAT(o.PRODUCE_DATE,"%Y-%m") = '2022-05' # 생산일자가 2022년 5월인 식품
GROUP BY 
    PRODUCT_ID,
    PRODUCT_NAME
ORDER BY
    TOTAL_SALES DESC # 총매출 기준 내림차순

 

 

서울에 위치한 식당 목록 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/131118

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

⚠ 답변을 보고 싶지 않은 사람을 위해서 가림.
쿼리를 보고 싶은 분만 [더보기]를 클릭하세요

 

더보기
SELECT 
    I.REST_ID, # 식당 ID
    I.REST_NAME,# 식당 이름
    I.FOOD_TYPE,# 음식 종류
    I.FAVORITES,# 즐겨찾기수
    I.ADDRESS,# 주소
    ROUND(AVG(R.REVIEW_SCORE),2) AS SCORE # 리뷰 평균 점수 : 소수점 세 번째 자리에서 반올림
FROM REST_INFO I
INNER JOIN REST_REVIEW R
ON
    I.REST_ID = R.REST_ID
    AND LEFT(I.ADDRESS,2) = "서울" # 서울에 위치한 식당
GROUP BY
    I.REST_ID,
    I.REST_NAME,
    I.FOOD_TYPE,
    I.FAVORITES,
    I.ADDRESS
ORDER BY 
    SCORE DESC, # 평균점수 기준으로 내림차순 정렬
    I.FAVORITES DESC # 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬

 

그룹별 조건에 맞는 식당 목록 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/131124

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

⚠ 답변을 보고 싶지 않은 사람을 위해서 가림.
쿼리를 보고 싶은 분만 [더보기]를 클릭하세요

 

더보기
WITH vipdata AS ( # 가장 리뷰를 많이 작성한 회원의 member_id 추출
    SELECT 
        MEMBER_ID,
        COUNT(distinct REVIEW_ID) as rcnt # 리뷰 작성 개수
    FROM REST_REVIEW
    GROUP BY MEMBER_ID
    ORDER BY rcnt desc # 리뷰개수 내림차순
    LIMIT 1 # 최상위 1명만 노출
)

SELECT 
    m.MEMBER_NAME,
    r.REVIEW_TEXT,
    r.REVIEW_DATE
FROM MEMBER_PROFILE m
INNER JOIN vipdata v
    ON m.MEMBER_ID = v.MEMBER_ID
INNER JOIN REST_REVIEW r
    ON m.MEMBER_ID = r.MEMBER_ID
ORDER BY REVIEW_DATE # 리뷰 작성일을 기준으로 오름차순 정렬

 

 

 

'STUDY ✏️' 카테고리의 다른 글

solvesql 문제풀이 - 어려움  (2) 2022.07.10