SQL 뿌시기 2탄

1탄에 이어 2탄

by vitaesperanza

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,위 다 다르게 나옴.






keyword
이전 08화SQL 뿌시기 1탄