[TIL 12th] SQL코드카타, Case when이 최선이 아닌 문제
by 노실언니진행상황
Complete | `웹개발종합반` 완강
Complete | `엑셀보다 쉽고 빠른 SQL` 완강
Complete | 사전캠프 미션 `SQL 퀘스트`완료
Complete | 1차시 팀 미니 프로젝트 개발완료
Complete | 내일배움캠프 Spring 5기 사전캠프 (24.11.18.月 ~ 24.12.20.金─총 33일 / 14:00~18:00 ─일일 4시간)
In progress | 내일배움캠프 Spring 5기 본캠프 (24.12.23.月 ~ 25.05.06.火 ─총 135일 / 9:00~21:00─일일 12시간)
In progress | 국취제Ⅰ2회차 (24.12.13 ~ 25.01.12)
In progress | 자바 `Java 문법 종합반` 강의 듣기 NEW
In progress | 자바 혼공자바 읽기 & 퀘스트 하기
In progress | 코테 C++ 자료구조, 알고리즘 책 읽기
In progress | GIT 얄코의 깃/깃허브 책 읽고 실습 / 깃 특강 복습 NEW
To-do |얄코의 HTML/CSS/JS 책 읽기
To-do | DB 입문/실무 - 국민대 김남규 교수님 강의 듣기 & SQLD자격증챌린지 & SQL 자격검정 실전문제 풀기
부캠이 2챕터로 넘어가면서 조가 바뀌었다
우리 조는 모든 조원이 다 후루룩 다른 조로 들어갔다
나는 6조가 되었다
새로운 사람 새로운 테이블 아주 조으아써
배운 것
1) 코드카타 SQL : CASE/WHEN이 많아지는 건 별로야 → 몫 or 버림
간단 요약
다양한 price값을 만 원 단위로 그룹화하는 과정을
case/when 으로 그룹화하면 단순반복코드가 많아진다.
또한 when의 범주를 초과/미달하는 price 값은 처리가 불가능했다.
이 두 문제를 해결하기 위해서 case/when을 쓰지 않는 방향을 찾아보았고
몫 연산자 div나 버림함수 truncate 를 사용하여 해결하였다.
푼 문제와 실행결과 : https://school.programmers.co.kr/learn/courses/30/lessons/131530
첫 번째 코드
코드 설명 의식의 흐름대로 씀
특징 case 문(9개의 when)과 서브쿼리 사용
의문 1. 굳이 이렇게 많이 when 를 만들어야 하나? + price에 9만, 10만대도 생기면 또 만들어야 하는데
의문 2. 굳이 서브쿼리를 사용해야 하나? → 두 번째 코드는 일단 이걸 해결하는 방향으
select pr.PRICE_GROUP, count(pr.PRODUCT_ID) as PRODUCTS
from (
SELECT PRODUCT_ID, price,
case
when(price< 10000) then 0
when(PRICE>=10000 and price <20000) then 10000
when(PRICE>=20000 and price <30000) then 20000
when(PRICE>=30000 and price <40000) then 30000
when(PRICE>=40000 and price <50000) then 40000
when(PRICE>=50000 and price <60000) then 50000
when(PRICE>=60000 and price <70000) then 60000
when(PRICE>=70000 and price <80000) then 70000
when(PRICE>=80000 and price <90000) then 80000
end AS PRICE_GROUP
from product ) as pr
group by 1
order by 1
두 번째 코드
코드 설명 첫 번째 코드의 의문2. 서브쿼리를 뺌
특징 case 문(9개의 when) 사용
의문 when 이 너무 많고, 작성한 when에 벗어나는 price가 더 추가되는 경우에 대처를 할 수 없다
SELECT case
when(price< 10000) then 0
when(PRICE>=10000 and price <20000) then 10000
when(PRICE>=20000 and price <30000) then 20000
when(PRICE>=30000 and price <40000) then 30000
when(PRICE>=40000 and price <50000) then 40000
when(PRICE>=50000 and price <60000) then 50000
when(PRICE>=60000 and price <70000) then 60000
when(PRICE>=70000 and price <80000) then 70000
when(PRICE>=80000 and price <90000) then 80000
end AS PRICE_GROUP,
count(*) as PRODUCTS
FROM product
group by 1
order by 1
세 번째 코드
코드 설명 div(몫) 연산자를 사용하여 case when 을 줄이고, 다양한 price 값에 대처가 가능한 쿼리문을 씀
참고자료 [링크]
의문 나누고 다시 곱하는 것이 비효율적이다
SELECT (PRICE div 10000)*10000 AS PRICE_GROUP,
count(*) as PRODUCTS
FROM product
group by 1
order by 1
네 번째 코드 / 최종
코드 설명 버림 함수truncate(컬럼명, 버릴 자릿수)를 사용하여 연산횟수를 2(곱, 나)→1(버림)로 줄였다
SELECT TRUNCATE(price, -4) AS PRICE_GROUP,
count(*) as PRODUCTS
FROM product
group by 1
order by 1
느낀 점 계속 기억해야할 것 / 다시 저번 팀플젝 리마인드
- 팀플젝은 시간계획, 역할분담 모두 세부적으로 잘 세워야 제한시간 내에 개발이 가능하고 회색지대를 최소화할 수 있는 것 같다.
(회색지대: 구현은 해야하는데 맡은 사람이 없는 경우)
- 깃 커밋 컨벤션 계속 사용하기
- Pull Request와 Issue창 적극 활용하기
- 트러블 슈팅 문서화 → 담당자가 필요하나
- README.md 작성하기 → 담당자가 필요하나(2)
→ 그러려면, 매 작업을 문서화 해야 함
- 깃 허브에 올라가는 코드 중 숨기고 싶은 코드구간은 어떻게 숨겨야 할까 ( gitignore 처럼 파일통째로 숨기는 것 말고)
- Git 브랜칭 전략 사용하여 개발 브랜치와 기능 브랜치 활용하기
https://youtu.be/wtsr5keXUyE?si=jFsteROePfqsIF7a
'Today I Learned' 카테고리의 다른 글
[TIL 14th] 역시나 자바도 입력 메소드가 나를 괴롭게 하는군요 (0) | 2025.01.10 |
---|---|
[TIL 13th] JAVA 2byte 정수형 char, short의 가장 큰 차이, 그리고 큰/작은 따옴표의 차이 (0) | 2025.01.09 |
[TIL 11th] 나의 첫 팀 프로젝트를 마무리하며, 코드 메모 및 보완점 (0) | 2024.12.31 |
[TIL 10th] 코드카타 까먹은 코드들 / 파이어베이스 쿼리사용법 / 협업시 유의점 (0) | 2024.12.30 |
[TIL 7th] Spring 5기 온보딩 | 배운게 없는데 많달까 (1) | 2024.12.23 |
블로그의 정보
노력하는 실버티어
노실언니