1탄에 이어 2탄
Step 6. <count 데이터 개수 세기>
*덧셈이 아니라, 총개수를 세는 것."
주의! 특정 컬럼만 셀때는 distinct 꼭 쓰고, count뒤에 띄어쓰기하면 안됨.
모든 전체 속성을 셀 때 - select count(1또는*)
특정 컬럼만 셀 때 count(distinct customer_id)
from food_orders
Ex)
총 고객이 몇 명인지 알려줘!
select count*
from customers
where country = ‘Mexico’
Step 7. <substring 설정(속성 별칭 중에서 ‘특정한 구문’만 뽑기)>
format: 어떤 특정한 속성column안의 별칭에서 일부만 남기려고 하는 거니까,
substr(괄호 일단 속성이름먼저 써, ‘원래 별칭’, 몇 번째부터 자를건지, 몇글자 자를건지)
왜 사용? 하나의 속성의 별칭에서 너무 길 때 줄이고 싶은 경우사용
ex)
select addr as "원래 주소",
substr(속성셀이름addr, 1 몇 번째 글자부터 자를지, 2 몇개의글자) as "시도"
from food_orders
where addr like '%서울특별시%'
ex)
select addr "원래 주소",
substr(addr, 1, 2) as "시도"
from food_orders
where addr like '%서울특별시%’
ex)
select day_of_the_week, substr(day_of_the_week, 5,3) as "판매요일"
from food_orders
Step 8. concat (원하는 속성값들끼리 하나의 속성으로 붙여주기)
format: concat(괄호하고 속성이름1, 속성이름2)
concat(괄호 붙일속성이름1, 쉼표하고 붙일속성이름2) 하면 돼
만약 하나의 속성 이름이 너무 길어서 몇글자만 추출해서 더하고 싶잖아.
그러면 concat(괄호열고 substr하고(원래 속성이름, 몇 번째에서끊을거야, 몇글자 끊을거야), 붙일이름2)
ex)
select restaurant_name "원래 이름”, addr "원래 주소",
concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름“
만약에 너가 별칭에 편집해서 수정하고 싶으면 문자니까 쉽표 안에 넣으면 돼 ‘[’ 또는 ‘-’
from food_orders
where addr like '%서울%'
Step 9. 조건문if가 2개이상 넘어가면 case when을 사용
format
select case when cuisine_type=’Korean’ then ‘한식’
when cuisine_type in (‘Japanese’, ‘Chinese’) then ‘아시아’
else ‘기타’
end
from food_orders
주의사항
- case when하고 두번째 조건when할때마다 쉼표 쓰면 안돼
- case when하고 그 다음에 조건연달아서 조건1 and 조건2라고 쓰고 then ‘instance별칭’
- 필요하면 else ‘별칭’하거나 불필요하면 안 써도 됨
- 맨 끝에 꼭 end as “속성 title”로 끝내야함.
if문 예시 => 2개 이상조건이라, case when해도 돼
ex)
SELECT *,
CASE
WHEN price >=11 then 'greater than 11'
WHEN price <=19 then 'lower than 19'
ELSE 'Extremes'
END AS Price_type
FROM Products;
Step 9. Join
공통 컬럼 기준으로 두 개의 다른 표를 묶어주는 행위.
<left join>
“표 A는 다 보여줘. 그리고 A의 각 행이 B랑 연결되는 게 있으면, 그 공통된 행을 이용해서 보여줄 수 있는 B의 내용도 더 해서 보여줘.”
예: 표a 구매자 정보/ 표b 실제구매 내역 / 공통된 셀 구매자 id
표 A 전체 + 표B에서 공통된 셀이랑 관련된 값도 다 따라옴.
구매자들 중 누가 사고 누가 구매 안했는지 알 수 있음. 구매자 id들중에서 구매 안한 사람은 null이라고 표시됨.
left join format:
select *
from 표a left join 표 b on (공통된분모) 표a.속성=표b.속성
(ex)
select *
from food_orders left join payments on food_orders.customer_id=payments.customer_id
select *
from food_orders as a left join payments as b on a.customer_id=b.customer_id
Step 10. window function 순위매기는 법
덩어리별로 분류해서 덩어리별로 순위를 매길 때 사용. 예를 들어 하나의 속성/셀 안에서 순위를 매기거나, 합을 낼때 사용한다.
rank함수 format특이점: rank 뒤에 괄호안에 아무것도 안들어감.
format:
rank () over (partition by cuisine_type 어떤 카테고리별로 랭킹매길거야 order by count_order desc 뭐가 일등이라고 할거야 (많은 주문수가 1위)) as 새로운 셀 이름
sum () over (partition by cuisine_type 어떤 카테고리별로 랭킹매길거야 order by count_order desc 뭐가 일등이라고 할거야 (많은 주문수가 1위))
group by는 그 셀에 맞춰서 1개의 값만 출력
ex) group by cuisine_type 의 average rating 값 1개만 나와. korean 음식 대표해서 rating한개값만 도출.
window함수에서 하면 카테고리를 나눠서 묶긴 하지만, 하나의 카테고리 안에 여러 행 결과값 도출
ex) rank() over (partition by cuisine_type order by avg_rating) 하면 American 음식중에 각 레스토랑 별로 1,2,3,위 다 다르게 나옴.