엑셀보다 쉽고 빠른 SQL 2주차
숫자 연산 종류
| 연산자 | 설명 |
| + | 더하기 |
| - | 빼기 |
| * | 곱하기 |
| / | 나누기 |
기본 연산
- 합계 : sum(컬럼)
- 평균 : avg(컬럼)
데이터 갯수
- 데이터 갯수 : count(컬럼) (= count(1), count(*))
- 몇개의 값을 가지고 있는지 구할 때 : distinct
데이터의 범위
- 최솟값 : min(컬럼)
- 최댓값 : max(컬럼)
GROUP BY로 범주별 연산
select 카테고리컬럼(원하는컬럼 아무거나),
sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)
Queary 결과를 정렬하여 사용 (ORDER BY)
select 카테고리컬럼(원하는컬럼 아무거나),
sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)
order by 정렬을 원하는 컬럼 (카테고리컬럼(원하는컬럼 아무거나), sum(계산 컬럼) 둘 다 가능)
정렬의 종류
| 종류 | 구문 | 예시 |
| 오름차순 | 생략 | order by sum(price) |
| 내림차순 | desc | order by sum(price) desc |
주차 마무리 퀴즈
1. 조회 할 데이터를 SQL 구조에 맞춰서 바꿔보기
1) order by sum(delivery_time) desc
2) group by cuisine_type
3) where day_of_the_week=’Weekend’
4) from food_orders
5) select cuisine_type, sum(delivery_time) total_delivery_time
답) 5 -> 4 -> 3 -> 2 -> 1
2. 조회 할 데이터를 SQL 구조에 맞춰서 바꿔보기
1) where age between 20 and 40
2) select age, count(name) count_of_name
3) order by age
4) group by age
5) from customers
답) 2 -> 5 -> 1 -> 4 -> 3
HW. 2주차 숙제
음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고, 가장 낮은 주문금액 순으로 (내림차순) 정렬하기
답)
select cuisine_type,
min(price) min_price,
max(price) max_price
from food_orders
group by cuisine_type
order by min_price desc
해설)
select cuisine_type,
min(price) min_price,
max(price) max_price
from food_orders
group by cuisine_type
order by min(price) desc
=> order by 뒤에 min(price)를 적어야했지만 min_price를 작성함. 결과는 동일했지만 따로 칭한 가명보다는 연산한 컬럼을 그대로 쓰는게 맞아보임.
엑셀보다 쉽고 빠른 SQL 3주차
특정 문자를 다른 문자로 바꾸기
| replace( 바꿀 컬럼 , 현재 값 , 바꿀 값 ) |
원하는 문자만 남기기
| substr( 조회 할 컬럼 , 시작 위치 , 글자 수 ) |
여러 컬럼의 문자 합치기
| concat( 붙이고 싶은 값 1, 붙이고 싶은 값 2, 붙이고 싶은 값 3, .....) |
- 컬럼, 한글, 영어, 숫자, 기타 특수문자 를 붙일 수 있다.
조건에 따라 다른 방법 적용
if 문
| if(조건, 조건을 충족할 때, 조건을 충족하지 못할 때) |
Case 문
| case when 조건1 then 값(수식)1 when 조건2 then 값(수식)2 else 값(수식)3 end |
- if 문을 여러번 쓴 효과 ( = if(조건1, 값1, if(조건2, 값2, 값3)) )
SQL문 문자/숫자 계산 오류
- data type이 다를 때 연산이 되지 않을 수 있음.
- 문자, 숫자를 혼합하여 함수에 사용 할 때에는 데이터 타입 변경 필요
| --숫자로 변경 cast(if(rating='Not given', '1', rating) as decimal) --문자로 변경 concat(restaurant_name, '-', cast(order_id as char)) |
HW. 3주차 숙제
다음의 조건으로 배달시간이 늦었는지 판단하는 값을 만들어주세요.
- 주중 : 25분 이상
- 주말 : 30분 이상
답)
select cuisine_type,
min(price) min_price,
max(price) max_price
from food_orders
group by cuisine_type
order by min_price desc
해설)
select order_id,
restaurant_name,
day_of_the_week,
delivery_time,
case
when day_of_the_week='Weekday' and delivery_time>=25 then 'Late'
when day_of_the_week='Weekend' and delivery_time>=30 then 'Late'
else 'On-time'
end "지연여부"
from food_orders
=> else를 통해 예외는 모두 처리 가능. 결과는 같았지만 문제 복잡해질수록 코드가 길어질 가능성 존재. 좀 더 간결하게 쓸 수 있도록 고민해 볼 필요성 있음.
팀 진행 및 결정사항
2025.12.23 결정사항
아티클 스터디 2회차 주제 '비개발자를 위한 엑셀로 이해하는 SQL: FROM과 SELECT'
SQL 구체적 사례 '쿠팡이츠' 결정
day3 미션 관심있는 앱 서비스 '쿠팡이츠' 결정
2025.12.24 일정
9~10시 스크럼 일지, 아티클 스터디
12~13시 아티클 스터디
14-16시 직무스터디
20시30분~21시 스크럼 오후 일지
오늘의 회고
SQL이 점점 난이도가 올라가는 것 같다. 잘 따라가고 있다 생각했는데 강의를 볼수록 헷갈리기 시작했다. 지금 기초를 잘해놔야 나중이 편하기에 조금 더 꼼꼼히 보려고 노력중이다.
'내일배움캠프' 카테고리의 다른 글
| [내일배움캠프] TIL 6일차 25.12.30(화) (2) | 2025.12.30 |
|---|---|
| [내일배움캠프] TIL 5일차 25.12.29(월) (0) | 2025.12.29 |
| [내일배움캠프] TIL 4일차 25.12.26(금) (0) | 2025.12.26 |
| [내일배움캠프] TIL 3일차 25.12.24(수) (0) | 2025.12.24 |
| [내일배움캠프] TIL 1일차 25.12.22(월) (0) | 2025.12.22 |