기본 연산
sum(컬럼) 합계
avg(컬럼) 평균
count(1) 테이블 내의 모든 데이터 갯수 구하기(중복 포함)
count(distinct 컬럼) 컬럼의 갯수 구하기(중복 제외)
min(컬럼) 최솟값
max(컬럼) 최댓값
WHERE 절을 활용한 데이터 추출
문제 : 30000원 이상의 음식 주문 갯수 추출하기
select count(1) as 'price>30000'
from food_orders
where price>=30000
= 30000원 이상인 가격대의 갯수 추출
과정
1. 어떤 테이블인지? from food_orders
2. 어떤 컬럼인지? price
3. 어떤 조건인지? where price>=30000
4. 갯수 구하기 select count (1)
문제 : 한국 음식의 평균 가격
select avg(price) as avg_price_korean
from food_orders
where cuisine_type='Korean'
= 한국 음식의 평균가격 추출
과정
1. 어떤 테이블? food_orders
2. 어떤 컬럼? cuisine_type
3. 어떤 조건? 'Korean
4. 평균 구하기 avg(price)
범주별 연산
문제 : 레스토랑 별 최대 주문 금액
select max(price) as max_price,
restaurant_name
from food_orders
group by restaurant_name
문제 : 결제 타입별 최근 결제 일자 추출
select pay_type,
max(date) recent_date
from payments
group by pay_type
group by 컬럼 = 컬럼별로 그룹 짓기
쿼리 결과 정렬하기
select cuisine_type,
sum(price) sum_of_price
from food_orders
group by cuisine_type
order by sum(price) =가격 합계 오름차순 정렬 됨. (내림차순을 희망할 경우 desc 추가
문제 : 음식점별 최대 금액 계산 후 내림차 순 정렬
select restaurant_name,
max(price) max_price = 레스토랑, 최대 금액 표기
from food_orders = 푸드오더 테이블에서 데이터 추출
group by restaurant_name = 레스토랑 별 그룹 짓기
order by max(price) desc = 최댓값 정렬 (desc-내림차순 정렬)
order by gender, name = 성별 기준으로 오름차 순 이후 이름 오름차순 정렬.
SQL 기본 구조 정리
select 데이터 조회
from 어디서 데이터 가져오는지
where 조건
group by 범주별 계산
order by 조회 결과 정렬
SQL로 데이터 가공하기
1. 특정 문자를 다른 문자로 바꾸기
select restaurant_name "원래 상점명", = 기존 상점명 불러오기
replace(restaurant_name, 'Blue', 'Pink') "바뀐 상점명" = 레스토랑 네임의 블루 를 핑크로 변경
from food_orders = 데이터 가져올 테이블
where restaurant_name like '%Blue Ribbon%' =블루 리본을 포함하는 음식점
replace(바꿀 컬럼, 현재 값, 바꿀 값) = 특정문자를 다른 문자로 바꾸기
substr(조회 할 컬럼, 시작 위치, 글자 수) = 컬럼에서 원하는 문자만 남기기
concat(붙이고 싶은 값 1, 붙이고 싶은 값 2, 붙이고 싶은 값 3 ...)
문자를 붙이고 싶으면 작은 따옴표 필요
select substr(email, 10), = 도메인만 추출
count(1) "고객 수", = 고객 수 추출
avg(age) "평균연령" = 평균 연령 계산
from customers
group by 1 = 첫 번째 셀렉트인 도메인 별 그룹 짓기
조건문
IF(조건, 충족 시, 충족 못할 시)
예시1)
select restaurant_name,
cuisine_type "원래 음식 타입",
if(cuisine_type='Korean', '한식', '기타') "음식 타입"
=음식 타입이 코리안 일 경우 한식으로 표시, 아닐 경우 기타
from food_orders
예시2)
select addr "원래 주소",
if(addr like '%평택군%', replace(addr, '문곡리', '문가리'), addr) "바뀐 주소"
=주소가 평택군을 포함할 땐 문가리로 변경, 아닐경우 그대로
from food_orders
where addr like '%문곡리%'
예시3)
select substring(if(email like '%gmail%', replace(email, 'gmail', '@gmail'), email), 10) "이메일 도메인",
=만약 이메일이 지메일을 포함하고 있을 때, @지메일로 변경, 아닐 경우 그대로 표시
count(customer_id) "고객 수",
avg(age) "평균 연령"
from customers
group by 1
case when 조건 1 then 값
when 조건 2 then 값
else 값
end
조건 1일 때의 값, 조건 2일 때의 값, 아닐 경우 값
select case when cuisine_type='Korean' then '한식'
when cuisine_type in ('Japanese','Chinese') then '아시아'
else '기타' end "음식 타입",
cuisine_type
from food_orders
=코리안일 경우 한식, 재패니즈,차이니즈 일 경우 아시아, 이외의 경우 기타.