Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

나의 기록

[TIL / Today I Learned] Day 1 본문

개발일지/TIL

[TIL / Today I Learned] Day 1

리베린 2023. 12. 19. 21:38

진도: 2주차 완강, 3주차 3-5까지 수강, 3주차부터 난이도 높아짐을 느낌.

 

 

 

오늘 배운 함수 정리

  • 합계: sum(컬럼)
  • 평균: avg(컬럼)
  • 데이터 갯수세기: count(컬럼), (컬럼명 대신 1 혹은 *사용 가능)
  • 몇 개의 값을 가지고 있는지 구할 때 distinct

ex) 데이터 갯수: 주문 테이블의 전체 주문은 몇 건? 

      몇 개의 값: 주문을 한 고객은 몇 명?

select count(1) count_of_orders,
count(distinct customer_id) count_of_customers
from food_orders

-> 주문 건수 전체와, 주문 한 고객 수를 구함.

 

  • 최솟값, 최댓값 구하기: min, max
  • group by, order by
  • order by: 음식 종류별 주문 금액 합계를 ‘주문 금액 합계’ 기준으로 오름차순 정렬
  • *내림차순은 -> order by sum(price) desc

ex) 음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고, 가장 낮은 주문금액 순으로 (내림차순) 정렬하기

  1. 어떤 테이블에서 데이터를 뽑을 것인가 → food_orders
  2. 어떤 컬럼을 이용할 것인가 → cuisine_type, food_price
  3. 어떤 조건을 지정해야 하는가 →x
  4. 어떤 함수 (수식) 을 이용해야 하는가 → desc
 
select cuisine_type,
min(price) min_price,
max(price) max_price
from food_orders
group by cuisine_type
order by min(price) desc

 

내가 실수한 부분 : 두 번째 줄에서 , 안 써서 계속 오류남. 계속 실수하는 부분 ★

 

  • 무엇인가 대체하고 싶을 때 쓰는 함수: replace
  • 다른 문자로 수정하고 싶을 때, 주소 전체가 아닌 '시도' 정보만 필요. 
  • replace(바꿀 컬럼, 현재 값, 바꿀 값)

ex) 주소의 ‘문곡리’ 를 ‘문가리’ 로 바꾸기

 

select addr "원래 주소",
replace(addr, '문곡리', '문가리') "바뀐 주소"
from food_orders
where addr like '%문곡리%'

 

addr에서 문곡리로 설정되어 있는 것을 -> 문가리로 바꿔주고, "바뀐 주소"로 이름 지정

주소에 '문곡리'를 포함해야 한다.

 

 

  • substring (substr)
  • 전체 데이터가 아닌 특정 문자만 필요할 때, SQL 로 필요한 부분만 조회
  • substr(조회 할 컬럼, 시작 위치, 글자 수)
select addr "원래 주소",
           substr(addr, 1, 2) "시도"
from food_orders
where addr like '%서울특별시%'

 

주소에서 첫 번째 글자 위치부터 두 번째 글자까지 조회, 그리고 컬럼이름 "시도"로 설정

문자에 '서울특별시' 포함해야 됨.

 

 

  • concat
  • 원하는 문자가 여러 컬럼에 있을 때, 하나로 합쳐서 업무에 필요한 형태로 만들기
  • concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, .....)
select restaurant_name "원래 이름",
addr "원래 주소",
concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
from food_orders
where addr like '%서울%'

 

문자 적어줄 때 ''와 "" 잊지 말자.

 

 

[실습] 서울 지역의 음식 타입별 평균 음식 주문금액 구하기 (출력 : ‘서울’, ‘타입’, ‘평균 금액’)

  1. 어떤 테이블에서 데이터를 뽑을 것인가 → 주문 테이블 from food_orders
  2. 어떤 컬럼을 이용할 것인가 → 주문 금액, 음식 타입, 주소 price, cuisine_type, addr
  3. 어떤 조건을 지정해야 하는가 → 서울 지역 where addr like ‘%서울%’
  4. 어떤 함수 (수식) 을 이용해야 하는가 → avg(price), substring(addr, 1, 2)
select substr(addr, 1, 2) "시도",
cuisine_type "음식 종류",
avg(price) "평균 금액"
from food_orders
where addr like '%서울%'
group by 1,2

chat gpt

계속 헷갈리는 group by 1,2 

 

  • 이메일 도메인별 고객 수와 평균 연령 구하기
  • 여기에서 @ 이후의 문자열을 가져오기 위해 10부터!
 
select substring(email, 10) "이메일 도메인",
count(customer_id) "고객 수",
avg(age) "평균 연령"
from customers
group by 1

group by 1은 간단한 표기법으로 첫 번째 열(이메일 도메인)을 기준으로 그룹화하는 것을 의미합니다.

이것은 group by substring(email, 10)과 동일한 결과 (gpt)

 

  • 서울 지역음식 타입별 평균 음식 주문금액 구하기 (출력 : ‘서울’, ‘타입’, ‘평균 금액’)
select substr(addr, 1, 2) "시도",
cuisine_type "음식 종류",
avg(price) "평균 금액"
from food_orders
where addr like '%서울%'
group by 1,2

 

‘문곡리’ 가 평택에만 해당될 때, 평택 ‘문곡리’ 만 ‘문가리’ 로 수정

  • if(조건, 조건을 충족할 때, 조건을 충족하지 못할 때)
select addr "원래 주소",
if(addr like '%평택군%', replace(addr, '문곡리', '문가리'), addr) "바뀐 주소"
from food_orders
where addr like '%문곡리%'
  • 코드 해석: 만약 주소에 평택군 포함하면, 문곡리를 -> 문가리로 바꿔주고,
  • 아니라면 그냥 주소만 나타내줘.
  • where like : 문곡리를 포함한 주소

 

case when 조건1 then 값(수식)1
         when 조건2 then 값(수식)2
         else 값(수식)3
end

 

음식 타입을 ‘Korean’ 일 때는 ‘한식’, ‘Japanese’ 혹은 ‘Chienese’ 일 때는 ‘아시아’, 그 외에는 ‘기타’ 라고 지정

 

 
select case when cuisine_type='Korean' then '한식'
when cuisine_type in ('Japanese', 'Chinese')then '아시아'
else '기타' end "음식타입",
cuisine_type
from food_orders

두 개 중 하나이기 때문에 in 사용