본문 바로가기
프로그래머스/SQL

GROUP BY 유형 모음 [프로그래머스].ORACLE (SQL 고득점 키트)

by 몰라닉네임 2023. 10. 21.

프로그래머스의 SQL 고득점 키트에 있는 GROUP BY 문제 모음

 

 

 

재구매가 일어난 상품과 회원 리스트 구하기

 

FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 순으로 실행

1. FROM  대상 테이블 참조

2. WHERE   조건

3. GROUP BY: 특정 컬럼을 기준으로 그룹화합니다. (행들을 소그룹화)

4. HAVING: 그룹에 대한 조건절, 그룹 중 조건에 맞는 그룹만 남깁니다.

5. SELECT 질의/출력

6. ORDER BY 데이터 정렬

 

성분으로 구분한 아이스크림 총 주문량 LV 2

명시적 JOIN

작은 순서대로-> 오름차순

-- 코드를 입력하세요
SELECT I.INGREDIENT_TYPE, SUM(F.TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF F JOIN ICECREAM_INFO I ON F.FLAVOR = I.FLAVOR
GROUP BY I.INGREDIENT_TYPE
ORDER BY TOTAL_ORDER;

.

 

진료과별 총 예약 횟수 출력하기 LV 2

문제풀이 

1. TO_CHAR(칼럼, '형식') = '형식'

ORDER BY ->

SELECT MCDP_CD AS "진료과코드"
,      COUNT(*) AS "5월예약건수"
FROM APPOINTMENT
WHERE TO_CHAR(APNT_YMD, 'YYYY-MM') = '2022-05'
GROUP BY MCDP_CD
ORDER BY "5월예약건수", "진료과코드";

.한글 ALIAS 는 " "  써야한다. ??

문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/132202

 

자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 

문제풀이

OPTIONS LIKE '%열선시트%'  or ~~

--COUNT(*) AS CARS 해도 정답 

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

.

 

가격대 별 상품 개수 구하기

 

 

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

TODO
자동차 ID를 기준으로 내림차순

조건
10월16일 사이에 있으면 대여 중 ELSE 대여가능 END AS AVA~
얘를 MAX 한 값을 찾아야한다. 제일 최신 기록으로 하기 위해서 

SELECT CAR_ID,
MAX(CASE WHEN '2022-10-16' BETWEEN TO_CHAR(START_DATE, 'YYYY-MM-DD') AND TO_CHAR(END_DATE, 'YYYY-MM-DD')
THEN '대여중'
ELSE '대여 가능'
END) AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;