프로그래머스 SQL 고득점 Kit - GROUP BY 문제 풀이 모음 (MySQL)

정진희·2025년 5월 23일

SQL 문제 풀이

목록 보기
5/6
post-thumbnail

문제 푸는중~ / 아직 풀지 않는 문제의 풀이는 없습니다.

[Lv.2] - 동명 동물 수 찾기

  • NULL값 제외하기 위해서 COUNT에 *말고, 컬럼명을 넣었다.
    SELECT NAME, COUNT(NAME) COUNT
    FROM ANIMAL_INS
    GROUP BY NAME
    HAVING COUNT(NAME) >= 2
    ORDER BY 1;

[Lv.2] - 진료과별 총 예약 횟수 출력하기

  • 별칭(alias)을 적을 때 따옴표를 안 쓰거나 큰따옴표를 써야 한다. (작은따옴표는 문자열로 인식함)
SELECT MCDP_CD 진료과코드, COUNT(*) 5월예약건수
FROM APPOINTMENT
WHERE APNT_YMD LIKE '2022-05%'
GROUP BY MCDP_CD
ORDER BY 5월예약건수, 진료과코드;

[Lv.2] - 고양이와 개는 몇 마리 있을까

SELECT ANIMAL_TYPE, COUNT(*) count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY 1;

[Lv.2] - 입양 시각 구하기(1)

SELECT HOUR(DATETIME) HOUR, COUNT(*) COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR BETWEEN 9 AND 19
ORDER BY HOUR;

[Lv.2] - 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

SELECT CAR_TYPE, COUNT(CAR_TYPE) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%열선시트%' OR OPTIONS LIKE '%통풍시트%' OR OPTIONS LIKE '%가죽시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC;

[Lv.2] - 성분으로 구분한 아이스크림 총 주문량

SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) TOTAL_ORDER
FROM FIRST_HALF F JOIN ICECREAM_INFO I ON F.FLAVOR = I.FLAVOR
GROUP BY INGREDIENT_TYPE
ORDER BY 2;

[Lv.3] - 카테고리 별 도서 판매량 집계하기

SELECT CATEGORY, SUM(SALES) TOTAL_SALES
FROM BOOK AS B
    JOIN BOOK_SALES AS S
    ON B.BOOK_ID = S.BOOK_ID	
WHERE SALES_DATE LIKE '2022-01%'
GROUP BY CATEGORY
ORDER BY CATEGORY;

[Lv.3] - 조건에 맞는 사용자와 총 거래금액 조회하기

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

[Lv.3] - 즐겨찾기가 가장 많은 식당 정보 출력하기

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

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

SELECT CAR_ID,
CASE
    -- WHEN START_DATE <= date('2022-10-16') AND END_DATE >= date('2022-10-16') THEN '대여중'
    -- WHEN MAX('2022-10-16' BETWEEN START_DATE AND END_DATE) = 1 THEN '대여중'
    WHEN MAX(START_DATE <= date('2022-10-16') AND END_DATE >= date('2022-10-16')) THEN '대여중'
    ELSE '대여 가능'
END AS 'AVAILABILITY'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
profile
고민하고, 공부해서 발전하는 개발자가 되자🔥

0개의 댓글