기록이 힘이다.

[프로그래머스] GROUP BY (Level 3) 본문

SQL

[프로그래머스] GROUP BY (Level 3)

dev22 2024. 2. 28. 12:30
728x90

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

 

프로그래머스

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

programmers.co.kr

즐겨찾기가 가장 많은 식당 정보 출력하기

REST_INFO 테이블에서 음식 종류별로 / 즐겨찾기 수가 가장 많은 /식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작상해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.

SELECT
    FOOD_TYPE,
    REST_ID,
    REST_NAME,
    FAVORITES
FROM
    REST_INFO
WHERE
    (FOOD_TYPE, FAVORITES) IN (
        SELECT
            FOOD_TYPE,
            MAX(FAVORITES) AS MAX_FAVORITES
        FROM
            REST_INFO
        GROUP BY
            FOOD_TYPE
    )
ORDER BY
    FOOD_TYPE DESC;

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

 

프로그래머스

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

programmers.co.kr

조건에 맞는 사용자와 총 거래금액 조회하기

USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 완료된 중고 거래의/ 총금액이 70만 원 이상인 사람/의 회원 ID, 닉네임, 총거래금액을 조회하는 SQL문을 작성해주세요. 결과는 총거래금액을 기준으로 오름차순 정렬해주세요.

SELECT u.USER_ID, u.NICKNAME, SUM(b.PRICE) AS TOTAL_SALES
FROM USED_GOODS_BOARD b
JOIN USED_GOODS_USER u ON b.WRITER_ID = u.USER_ID
WHERE b.STATUS = 'DONE'
GROUP BY u.USER_ID
HAVING SUM(b.PRICE) >= 700000
ORDER BY TOTAL_SALES;

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

 

프로그래머스

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

programmers.co.kr

카테고리 별 도서 판매량 집계하기

2022년 1월의 /카테고리 별 /도서 판매량을 합산하고, 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 카테고리명을 기준으로 오름차순 정렬해주세요.

SELECT  B.CATEGORY ,sum(S.SALES) TOTAL_SALES
FROM BOOK B
JOIN BOOK_SALES S
ON B.BOOK_ID = S.BOOK_ID
WHERE DATE_FORMAT(S.SALES_DATE,"%Y-%m-%d") LIKE "2022-01%"
GROUP BY B.CATEGORY
ORDER BY B.CATEGORY

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

 

프로그래머스

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

programmers.co.kr

자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.

SELECT CAR_ID,
    CASE WHEN CAR_ID in 
        (SELECT CAR_ID 
         FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
         WHERE "2022-10-16" Between START_DATE and END_DATE) THEN "대여중"
    else "대여 가능"
    end  AVAILABILITY
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    GROUP BY 1
    ORDER BY 1 desc

반납 날짜에 대한 표현법을 END_DATE에 한해서 적용해야 하는 걸로 생각하여 시간이 조금 걸렸다. START_DATE에 대해서도 같은 날짜가 적용되는지 확인해주어야 한다.  

해당 문제에 대한 생각의 풀이를 아래 링크를 통해 해결할 수 있었다. 

https://sqlmater.tistory.com/59

 

[MYSQL] PROGRAMMERS_자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

SELECT CAR_ID, CASE WHEN CAR_ID in (SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE "2022-10-16" Between START_DATE and END_DATE) THEN "대여중" else "대여 가능" end AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY 1 ORDER BY 1

sqlmater.tistory.com

 

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

 

프로그래머스

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

programmers.co.kr

 

대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.

https://sqlmater.tistory.com/62

 

[MYSQL] PROGRAMMERS_대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

SELECT MONTH(START_DATE)MONTH,CAR_ID,COUNT(CAR_ID) as RECORDS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE 1=1 AND DATE_FORMAT(START_DATE,'%Y-%m') between '2022-08' and '2022-10' AND CAR_ID in (SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY where 1=1

sqlmater.tistory.com

DATE_FORMAT  함수와 같은 기존에 주어진 함수의 활용에 대해 생각의 힘이 필요해 보인다. 각 문장에 대한 해석을 할 때 어떻게 풀어나갈 것인지 끊어서 해석을 하고 시간 내에서 문제를 풀어낼 수 있도록 많은 경험이 필요하다. 

 

공부한 내용을 통해서 활용의 단계로 나아가는 것이 쉽지는 않지만 쿼리 경험이 적은 만큼 제일 중요한 '시간 내 문제 해결'이라는 목표를 향해 LEVEL4 를 풀어나가기 위해서는 확실한 이해를 통한 풀이가 필요하다.