[프로그래머스] GROUP BY
1. 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (Level 3)
풀이
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 AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC
CASE
문을 사용- 서브쿼리를 사용해
2022-10-06
일이 대여 시작일자(포함)와 대여 종료일자(포함) 사이에 있는CAR_ID
를 구한다.BETWEEN
~AND
사용
GROUP BY
를 통해CAR_ID
별로 위에서 구한 조건에 해당하는CAR_ID
라면 ‘대여중’으로, 그렇지 않으면 ‘대여 가능’으로 표시한 후
AVAILABILITY
라는 컬럼에 값을 출력한다.ORDER BY
를 이용해CAR_ID
를 기준으로 내림차순 정렬한다.
2. 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (Level 2)
풀이
select car_type, count(car_type)
from CAR_RENTAL_COMPANY_CAR
where options like '%통풍시트%' or options like '%열선시트%' or options like '%가죽시트%'
group by car_type
order by car_type asc
- 특정 문자 또는 문자열을 포함하고 있는 값을 검색하고 싶을 때
LIKE
사용
3. 성분으로 구분한 아이스크림 총 주문량 (Level 2)
풀이
select ingredient_type, sum(total_order) as total_order
from FIRST_HALF F
inner join ICECREAM_INFO I
on F.flavor = I.flavor
group by ingredient_type
order by total_order asc
- 상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총 주문량을 조회하기
- 상반기 동안 아이스크림 가게의 주문 정보를 담은 테이블
FIRST_HALF
에는 아이스크림 성분 타입에 대한 정보가 없기 때문에 성분 타입을 가지고 있는ICECREAM_INFO
테이블과 조인해줘야 한다. - 이 때, JOIN은
INNER JOIN
을 사용해 두 테이브에 공통적으로 조인될 조건을ON
을 통해 걸어준다.
(FLAVOR
는FIRST_HALF
테이블의 기본키이고,ICECREAM_INFO
테이블의FLAVOR
는FIRST_HALF
테이블의 외래키인 점을 이용한다.)
- 상반기 동안 아이스크림 가게의 주문 정보를 담은 테이블
- 테이블 명 옆에 별칭을 사용해 쿼리문을 줄여줄 수 있다.
- JOIN 할 때 동일한 컬럼명이 있다면 꼭
테이블 이름(또는 별칭).컬럼명
형식으로 표기해야 한다.
- JOIN 할 때 동일한 컬럼명이 있다면 꼭
- 성분 타입에 대한 아이스크림의 총 주문량을 구하기
GROUP BY
와 집계함수SUM
을 통해 성분 타입별 총 주문량을 구해준다.
- 정렬
ORDER BY
를 통해 오름차순 정렬
4. 진료과별 총 예약 횟수 출력하기 (Level 2)
풀이
select MCDP_CD as '진료과코드', count(APNT_NO) as '5월예약건수'
from APPOINTMENT
where APNT_YMD like '2022-05-%'
group by MCDP_CD
order by count(APNT_NO), MCDP_CD asc
- 5월에 예약한 데이터만 출력해야 하므로
LIKE
키워드를 사용한다.
가격대 별 상품 개수 구하기 (Level 2)
풀이
select truncate(price, -4) as PRICE_GROUP, count(product_id) as PRODUCTS
from PRODUCT
group by PRICE_GROUP
order by PRICE_GROUP asc
💛 개인 공부 기록용 블로그입니다. 👻