일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 페이지폴트
- 힙
- 운영체제
- 페이지히트
- SQL
- 세그멘테이션
- api정리
- cs
- 인접리스트
- sqllite
- 토스IH
- 멀티프로세싱
- 스택
- SWMaestro
- Docker
- computerscience
- 스레싱
- 캐시매핑
- discord봇
- 라운드로빈
- 대외활동후기
- 디코봇만들기
- devocean
- solvesql
- CPU스케줄링
- 디코
- 페이지교체알고리즘
- 이진트리
- CICD
- 소마14기
- Today
- Total
하마코
[SQL] SolveSQL 난이도2 문제 풀이 1 - group by, having, where, in, between 본문
[SQL] SolveSQL 난이도2 문제 풀이 1 - group by, having, where, in, between
hamaco.dev 2025. 8. 12. 21:00안녕하세요! 하마코입니다. 😊
SolveSQL 난이도1 무료 문제들을 모두 풀고 이어서 난이도2 문제 풀이를 시작했습니다!
난이도1 문제 풀이는 아래 링크를 참고해주세요! :D
[SQL] SolveSQL 난이도1 문제 풀이 1 - select, where, count, distinct, min/max, substring
안녕하세요! 하마코입니다. 😊 항상 프로그래머스로만 SQL을 연습했는데, 문제를 Lv.0부터 Lv.5까지 모두 풀어봐서 이번에는 SolveSQL로 문제 풀이를 진행해보려고 합니다! 외부 사이트에 Solvesql 문
hamaco.tistory.com
난이도1을 풀다가 난이도2를 푸니까 조금 어려워진 것을 체감했습니다. 😂
그래도 열심히 풀었더니 모두 정답을 맞췄답니다 - !
외부 사이트에 Solvesql 문제를 올릴 수 없어서 링크만 남겨놓겠습니다!
문제1 - 두 테이블 결합하기
링크 | 조인은 잘하지요 :)
SELECT
DISTINCT r.athlete_id
FROM RECORDS r
JOIN EVENTS e
ON r.event_id = e.id
WHERE e.SPORT = 'Golf';
문제2 - 레스토랑 웨이터의 팁 분석
링크 | GROUP BY를 2개에 해야했던 문제입니다. 요일 + 타임 조합으로 그룹을 나눠야했던 문제!
SELECT
DAY,
TIME,
ROUND(AVG(TIP),2) as avg_tip,
ROUND(AVG(SIZE),2) as avg_size
FROM TIPS
GROUP BY DAY, TIME
ORDER BY DAY, TIME;
문제3 -일별 블로그 방문자 수 집계
링크 | BETWEEN, AND 써서 특정 날짜 안에 있도록 집계한 문제입니다.
SELECT
DATE(EVENT_DATE_KST) as dt,
COUNT(DISTINCT user_pseudo_id) as users
FROM GA
WHERE DT
BETWEEN '2021-08-02' AND '2021-08-09'
GROUP BY DT
ORDER BY DT;
문제4 - 우리 플랫폼에 정착한 판매자 2
링크 | 이번 10문제 중 가장 시간을 많이 쓴 문제입니다. 주문당 금액이 50이 넘는 판매 건수가 100건이 넘는 판매자를 찾는 문제였는데요. 너무 복잡하게 생각해서 서브쿼리도 써보고 왔다갔다 했는데 where절에서 금액 찾고, Having절에서 판매 건수 찾으면 됐던..!! 맞추고 보니 간단한 문제였습니다.
SELECT
SELLER_ID,
COUNT(DISTINCT ORDER_ID) as orders
FROM
OLIST_ORDER_ITEMS_DATASET
WHERE
PRICE >= 50
GROUP BY
SELLER_ID
HAVING
COUNT(DISTINCT ORDER_ID) >= 100
ORDER BY orders DESC;
문제5 - 레스토랑의 일일 매출
링크 | GROUP BY만 알면 풀 수 있는 간단한 문제 :)
SELECT
DAY,
SUM(TOTAL_BILL) as 'revenue_daily'
FROM TIPS
GROUP BY DAY
HAVING revenue_daily >= 1000
ORDER BY revenue_daily DESC;
문제6 - 버뮤다 삼각지대에 들어가버린 택배
링크 | DATE 함수를 SELECT절에 쓰고 alias 한거를 Group by에서도 그대로 쓸 수 있었는데 이걸 인지하지 못해서 헤매다가 늦게 풀었습니다.
SELECT
DATE(ORDER_DELIVERED_CARRIER_DATE) as delivered_carrier_date,
COUNT(DISTINCT ORDER_ID) as orders
FROM
OLIST_ORDERS_DATASET
WHERE
ORDER_DELIVERED_CUSTOMER_DATE is NULL
AND
delivered_carrier_date like '2017-01%'
GROUP BY
delivered_carrier_date
ORDER BY
delivered_carrier_date;
문제7 - 쇼핑몰의 일일 매출액
링크 | 조인하고, 문제6에서 봤듯 alias 명칭으로 where절 사용도 해주고, where절에서 날짜를 >=로 표현도 해준 문제!
SELECT
DATE(d.ORDER_PURCHASE_TIMESTAMP) as dt,
ROUND(SUM(p.PAYMENT_VALUE),2) as revenue_daily
FROM OLIST_ORDERS_DATASET d
JOIN OLIST_ORDER_PAYMENTS_DATASET p ON d.ORDER_ID = p.ORDER_ID
WHERE dt >= '2018-01-01'
GROUP BY dt
ORDER BY dt;
문제8 - 점검이 필요한 자전거 찾기
링크 | RENT_AT, RETURN_AT(대여,반납시간) 각각 날짜 설정해줬습니다!
SELECT
BIKE_ID
FROM RENTAL_HISTORY
WHERE RENT_AT >= '2021-01' and RETURN_AT < '2021-02'
GROUP BY BIKE_ID
HAVING SUM(DISTANCE) >= 50000;
문제9 - 레스토랑의 대목
링크 | 첫 FROM 절부터 서브쿼리를 넣으면 * 조회를 할 수 없기에, Where절에 IN을 써서 요일을 먼저 고르고, * 조회 해줬습니다.
SELECT
*
FROM TIPS
WHERE DAY in (
SELECT
DAY
FROM TIPS
GROUP BY DAY
HAVING SUM(TOTAL_BILL) >= 1500
);
문제10 - 레스토랑의 요일별 VIP
링크 | 요일별 최대 매출액! Having절에 MAX() 사용했습니다.
SELECT *
FROM TIPS
GROUP BY DAY
HAVING MAX(TOTAL_BILL);
'DEV > Data Analysis' 카테고리의 다른 글
[SQL] SolveSQL 난이도2 문제 풀이 2 - REGEXP, DATE, STRFTIME, 열 추출 (4) | 2025.08.21 |
---|---|
[SQL] SolveSQL 난이도1 문제 풀이 2 - distinct, like, avg, round, 서브쿼리 (5) | 2025.08.09 |
[SQL] SolveSQL 난이도1 문제 풀이 1 - select, where, count, distinct, min/max, substring (4) | 2025.07.29 |
[논문리뷰] RQ-RAG로 Multi-turn 대화 검색, 응답 생성 개선 (2) | 2025.05.07 |