728x90
식품분류별 가장 비싼 식품의 정보 조회하기
-- 식품분류별로 가장 비싼 식품
-- 분류, 가격, 이름
-- 과자, 국, 김치, 식용유만 출력
-- 가격 기준 내림차순
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;
즐겨찾기가 가장 많은 식당 정보 출력하기
-- 음식종류별 즐겨찾기수가 가장 많은 식당
-- 음식 종류, 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;
고양이와 개는 몇 마리 있을까
-- 고양이와 개 각각 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;
동명 동물 수 찾기
-- 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수 조회
-- 이름순
SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME;
입양 시각 구하기(1)
-- 몇 시에 입양이 가장 활발하게 일어나는지 구하기
-- 시간대별로 몇 건 발생(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;
년, 월, 성별 별 상품 구매 회원 수 구하기
-- 년, 월, 성별별로 상품을 구매한 회원수 집계
-- 년, 월, 성별 기준으로 오름차순
-- 성별 정보가 없으면 제외
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)
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;
- 다시 풀어 보기
가격대별 상품 개수 구하기
-- 만원 단위의 가격대별로 상품 개수
-- 만원 아래에서 버림한 금액으로 GROUP BY
-- 가격대 기준으로 오름차순 정렬
SELECT TRUNCATE(PRICE, -4) AS PRICE_GROUP, COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY TRUNCATE(PRICE, -4)
ORDER BY PRICE_GROUP;
728x90
'프로그래밍 > DB' 카테고리의 다른 글
[SQL][프로그래머스] String, Date 문제 풀이 (0) | 2022.10.20 |
---|---|
[SQL][프로그래머스] IS NULL 문제 풀이 (0) | 2022.10.18 |
[SQL][프로그래머스] SUM, MAX, MIN 문제 풀이 (0) | 2022.10.16 |
[SQL][프로그래머스] SELECT 문제 풀이 (0) | 2022.10.15 |
[SQL][프로그래머스] JOIN 문제 풀이 (0) | 2022.10.14 |