프론트엔드 개발만 하다보니 SQL 문법을 자꾸 잊어버린다. 오늘부터 두 문제씩 풀어보려고 한다.
Lv1도 풀거라서 블로그에 기록하기 민망하지만 공개적으로 글을 써야 더 꼼꼼하게 공부하게 된다.
사실 문제 풀이보다는 모르는 개념 정리 위주일 것이다.
그동안은 바빠서 코테 직전에 벼락치기를 했었는데 하반기를 기다리며 확실히 공부해야겠다.
오라클에서의 소수점을 다루는 함수를 몇개 살펴보자.
1. ROUND(number, decimal_places)
- 반올림 함수
- 지정된 소수점 자리까지 표시한다. 예를 들어, 1을 쓰면 두번째 소수점에서 반올림해서 첫번째 자리수까지 표시되는 것이다.
- decimal_places을 생략하면 첫째자리에서 반올림한다.
- ROUND(123.4567, 2) 결과는 123.46
- ROUND(123.4567, 0) 결과는 123
- ROUND(123.4567) 결과는 123
- 날짜 데이터에도 사용이 가능하다. 이 때 TO_DATE 함수로 문자열을 날짜 데이터 타입으로 변경해줘야한다.
날짜 반올림
ROUND(TO_DATE('2023-06-15', 'YYYY-MM-DD'), 'MONTH') -- 결과는 '2023-07-01'
ROUND(TO_DATE('2023-06-15', 'YYYY-MM-DD'), 'YEAR') -- 결과는 '2024-01-01'
2. TRUNC(number, decimal_places)
- 지정된 소수점 자리에서 숫자를 잘라낸다.
- decimal_places를 생략하면 소수점을 모두 버리고 정수만 반환한다.
- TRUNC(123.4567, 2) 결과는 123.45
- TRUNC(123.4567, 0) 결과는 123
- TRUNC(123.4567) 결과는 123
날짜 데이터에도 사용이 가능하다. 이 때 TO_DATE 함수로 문자열을 날짜 데이터 타입으로 변경해줘야한다.
주의해야할 점은, 자르기라고 해서 해당 일/월/년도가 잘려 사라지는 게 아니고 시작날짜(01)가 되는 것이다. 날짜 포맷은 지켜져야한다.
날짜 자르기
TRUNC(TO_DATE('2023-06-15', 'YYYY-MM-DD'), 'MONTH') 결과는 '2023-06-01'
TRUNC(TO_DATE('2023-06-15', 'YYYY-MM-DD'), 'YEAR') 결과는 '2023-01-01'
3. CEIL(number)
- 올림 함수
- 가장 가까운 큰 정수를 반환한다. 소수점 첫번째에서 올림처리하는 것과 같다.
- CEIL(123.45) 결과는 124
- CEIL(-123.45) 결과는 -123
4. FLOOR(number)
- 내림
- 가장 가까운 작은 정수를 반환한다. 소수점 첫번째에서 내림처리하는 것과 같다.
- FLOOR(123.45) 결과는 123
- FLOOR(-123.45) 결과는 -124
프로그래머스의 연관 문제
평균 일일 대여 요금 구하기( Lv1)
결과값을 소수 첫 번째 자리에서 반올림해야한다.
SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV'
가격대 별 상품 개수 구하기(Lv2)
가격대별로 금액 구간을 그룹화하고 상품 개수를 구해야한다.
XXXX에 TRUNC(PRICE,-4)를 적용하면 0, 1XXXX에 적용하면 10000이 된다. 따라서 만원 단위로 구간을 그룹화할 수 있고, 이 개수를 카운팅해주면 된다.
-- 코드를 입력하세요
SELECT TRUNC(PRICE, -4) AS PRICE_GROUP,COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY TRUNC(PRICE, -4)
ORDER BY PRICE_GROUP
'나도 공부한다 > SQL' 카테고리의 다른 글
MySQL - DATE_FORMAT과 날짜/시간함수의 차이 (0) | 2024.10.22 |
---|---|
프로그래머스 SQL - 비트연산 (0) | 2024.06.17 |
프로그래머스 SQL - COALESCE (0) | 2024.06.13 |
프로그래머스 SQL - ROWNUM, FETCH (0) | 2024.06.13 |
프로그래머스 SQL - EXTRACT, GROUP BY (0) | 2024.06.11 |