[SQL][프로그래머스] GROUP BY 문제 풀이
728x90

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

 

프로그래머스

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

programmers.co.kr

-- 식품분류별로 가장 비싼 식품
-- 분류, 가격, 이름
-- 과자, 국, 김치, 식용유만 출력
-- 가격 기준 내림차순

SELECT F.CATEGORY, F.PRICE AS MAX_PRICE, F.PRODUCT_NAME
FROM FOOD_PRODUCT F JOIN 
	(SELECT CATEGORY, MAX(PRICE) AS MP
    FROM FOOD_PRODUCT
    WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
    GROUP BY CATEGORY) M
WHERE F.CATEGORY = M.CATEGORY AND F.PRICE = M.MP
ORDER BY MAX_PRICE DESC;

 

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

 

프로그래머스

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

programmers.co.kr

-- 음식종류별 즐겨찾기수가 가장 많은 식당
-- 음식 종류, ID, 식당 이름, 즐겨찾기수
-- 음식 종류 내림차순

SELECT RI.FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO RI JOIN
    (SELECT FOOD_TYPE, MAX(FAVORITES) MF FROM REST_INFO GROUP BY FOOD_TYPE) M
WHERE RI.FOOD_TYPE = M.FOOD_TYPE AND RI.FAVORITES = M.MF
ORDER BY FOOD_TYPE DESC;

 

고양이와 개는 몇 마리 있을까

 

프로그래머스

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

programmers.co.kr

-- 고양이와 개 각각 COUNT
-- 고양이 먼저

SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
HAVING ANIMAL_TYPE IN('Cat', 'Dog')
ORDER BY ANIMAL_TYPE;

 

동명 동물 수 찾기

 

프로그래머스

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

programmers.co.kr

-- 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수 조회
-- 이름순

SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME;

 

입양 시각 구하기(1)

 

프로그래머스

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

programmers.co.kr

-- 몇 시에 입양이 가장 활발하게 일어나는지 구하기
-- 시간대별로 몇 건 발생(9시부터 19시까지)
-- 시간대순 정렬

SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) < 20
GROUP BY HOUR(DATETIME)
ORDER BY HOUR;

 

 

년, 월, 성별 별 상품 구매 회원 수 구하기

 

프로그래머스

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

programmers.co.kr

-- 년, 월, 성별별로 상품을 구매한 회원수 집계
-- 년, 월, 성별 기준으로 오름차순
-- 성별 정보가 없으면 제외

SELECT YEAR(SALES_DATE) AS YEAR, MONTH(SALES_DATE) AS MONTH, GENDER, COUNT(DISTINCT OS.USER_ID) AS USERS
FROM USER_INFO UF JOIN ONLINE_SALE OS
ON UF.USER_ID = OS.USER_ID
WHERE GENDER IS NOT NULL
GROUP BY YEAR(SALES_DATE), MONTH(SALES_DATE), GENDER
ORDER BY YEAR, MONTH, GENDER;

- GROUP BY에서 회원 수 집계할 때 꼭 DISTINCT 쓰기

 

입양 시각 구하기(2)

 

프로그래머스

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

programmers.co.kr

WITH RECURSIVE TIME AS (
    SELECT 0 AS HOUR
    UNION ALL
    SELECT HOUR+1 FROM TIME
    WHERE HOUR<23
)

SELECT HOUR, COUNT(ANIMAL_OUTS.DATETIME) AS COUNT
FROM TIME LEFT JOIN ANIMAL_OUTS
ON TIME.HOUR = HOUR(ANIMAL_OUTS.DATETIME)
GROUP BY HOUR;

- 다시 풀어 보기

 

가격대별 상품 개수 구하기

 

프로그래머스

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

programmers.co.kr

-- 만원 단위의 가격대별로 상품 개수
-- 만원 아래에서 버림한 금액으로 GROUP BY
-- 가격대 기준으로 오름차순 정렬

SELECT TRUNCATE(PRICE, -4) AS PRICE_GROUP, COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY TRUNCATE(PRICE, -4)
ORDER BY PRICE_GROUP;
728x90