하마코

[SQL] SolveSQL 난이도1 문제 풀이 1 - select, where, count, distinct, min/max, substring 본문

DEV/Data Analysis

[SQL] SolveSQL 난이도1 문제 풀이 1 - select, where, count, distinct, min/max, substring

hamaco.dev 2025. 7. 29. 13:00

안녕하세요! 하마코입니다. 😊

 

항상 프로그래머스로만 SQL을 연습했는데, 문제를 Lv.0부터 Lv.5까지 모두 풀어봐서

이번에는 SolveSQL로 문제 풀이를 진행해보려고 합니다!

 


 

외부 사이트에 Solvesql 문제를 올릴 수 없어서 링크만 남겨놓겠습니다!

 

문제1 - 모든 데이터 조회하기

링크 | 손풀기 문제 :D

SELECT * FROM POINTS;

 

 

 

문제2 - 일부 데이터 조회하기

링크 | where절 쓰는 손풀기 문제!

SELECT *
FROM POINTS
WHERE QUARTET = 'I';

 

문제3 - 데이터 정렬하기

링크 | order by 쓰는 손풀기 문제! asc는 써도 되고 안 써도 된다.

SELECT *
FROM POINTS
WHERE QUARTET = 'I'
ORDER BY Y;

 

문제4 - 데이터 그룹으로 묶기

링크 | Round로 소수점 셋째 자리에서 반올림 해주고, AVG와 VARIANCE로 평균과 표본분산을 구했다.

VARIANCE 함수가 VAR()만 써도 되는 줄 알았는데 전체 이름을 다 써야했다.

SELECT
    QUARTET,
    ROUND(AVG(X),2) AS 'x_mean',
    ROUND(VARIANCE(X),2) AS 'x_var',
    ROUND(AVG(Y),2) AS 'y_mean',
    ROUND(VARIANCE(Y),2) AS 'y_var'
FROM POINTS
GROUP BY QUARTET;

 

문제5 - 특정 컬럼만 조회하기

링크 | 여러 컬럼 조회도 손풀기 :)

SELECT X, Y FROM POINTS;

 

문제6 - 몇 분이서 오셨어요?

링크 | 나머지 구하는 % 연산자 써서 사람이 홀수일 때만 추출했다.

SELECT *
FROM TIPS
WHERE SIZE%2=1;

 

문제7 - 최근 올림픽이 개최된 도시

링크 | SUBSTRING으로 세글자만 추출하고, 문제에는 없었지만 모든 글자를 대문자로 변환해야돼서 UPPER() 함수 사용했다.

SELECT
    YEAR,
    UPPER(SUBSTRING(CITY,1,3)) AS 'city'
FROM GAMES
WHERE YEAR >= 2000
ORDER BY YEAR DESC;

 

문제8 - 우리 플랫폼에 정착한 판매자1

링크 | ORDERS >= 100 을 처음에 WHERE 절에 썼는데, WHERE절이 SELECT절보다 먼저 실행돼서 ORDERS를 이해하지 못했다. HAVING 절에서 써야되는 점을 잊지 않아야겠다. 또한, ORDER_ID에 DISTINCT 적용 안 해서 레코드 수가 다르다고 나왔는데 이 점도 유념해야겠다.

SELECT
    SELLER_ID,
    COUNT(DISTINCT(ORDER_ID)) AS 'orders'
FROM OLIST_ORDER_ITEMS_DATASET
GROUP BY SELLER_ID
HAVING ORDERS >= 100;

 

문제9 - 최고의 근무일을 찾아라

링크 | 팁이 최고로 높은 날을 뽑아야했기에 DESC 정렬을 하고 LIMIT를 걸어주었다.

SELECT
    DAY,
    ROUND(SUM(TIP),3) AS 'tip_daily'
FROM TIPS
GROUP BY DAY
ORDER BY tip_daily DESC LIMIT 1;

 

문제10 - 첫 주문과 마지막 주문

링크 | 주문을 처음 한 날, 마지막으로 한 날을 뽑기 위해 DATE에 MIN, MAX를 적용해서 풀이했다.

SELECT
    MIN(DATE(ORDER_PURCHASE_TIMESTAMP)) AS 'first_order_date',
    MAX(DATE(ORDER_PURCHASE_TIMESTAMP)) AS 'last_order_date'
FROM OLIST_ORDERS_DATASET;