오늘 한 일
-SQL강의
-Chat GPT 웹개발 강의
-TIL작성
오늘 배운 것
-null에 대한 대처
->null제외
(방법1) if문으로 null제거
(방법2) where문에서 is not null사용
->null을 다른값으로 변환
(방법1) if문에서 null 변환
(방법2) coalesce문 활용
(방법3) ifnull문 활용
**coalesce(컬럼, 변환값)
**ifnull(컬럼, 변환값)
이상값에 대한 대처
:case when문으로 이상값들을 일정하게 맞춰준 후에
-> 맞춰준 연산값을 기준으로 합계, 평균 등을 구해야 함
-윈도우 함수 (cf. block)_윈도우 함수는 짝꿍(=over)과 함께 함
(1) rank: 순위 구하기
rank문은 4개의 요소로 이루어짐_rank(), over, (partition by ~ order by~)
단, rank()와 over는 생략 불가
(cf. rank함수는 연산할 컬럼 등을 지정할 필요가 없으므로, ()사이를 비워둠!)
ex.
rank() over (partition by cuisine_type order by cnt_order desc)
->주의할 점은 partition by와 order by 사이에 ,가 없다는 것.
->partition by는 어떻게 묶어서 순위 구할지. 여기서는 cuisine type별로 순위를 구하겠다는 뜻
->order by는 어떤 기준으로 순위 정할지. 여기서는 cnt_order가 많은 순서대로 순위를 구해달라는 뜻
(2) sum: 합, 누적합
ex. 음식타입별 총 주문건수 구하기
->group by 혹은 sum윈도우 함수_둘 중 아무거나 써도 됨!
단, sum윈도우 함수는 ()안에 연산할 컬럼을 적어줘야 함
sum(cnt_order) over (partition by cuisine_type) sum_cuisine : 합
sum(cnt_order) over (partition by cuisine_type order by cnt_order) cum_cuisine : 누적합
여기에 더해서 cnt_order/sum_cuisine 해주면 전체 중 차지하는 비율도 계산 가능
select cuisine_type,
restaurant_name,
cnt_order,
(cnt_order/sum_cuisine)*100 "비율",
sum((cnt_order/sum_cuisine)*100) over (partition by cuisine_type order by (cnt_order/sum_cuisine)*100) "누적비율"
from
(
select cuisine_type,
restaurant_name,
cnt_order,
sum(cnt_order) over (partition by cuisine_type) sum_cuisine,
sum(cnt_order) over (partition by cuisine_type order by cnt_order) cum_cuisine
from
(
select cuisine_type,
restaurant_name,
count(1) cnt_order
from food_orders
group by 1, 2
) a
order by cuisine_type, cnt_order
) b
order by 1, 5
위의 쿼리가 비율까지 구하고, 누적합 차순으로 정렬되도록 작성해본 쿼리..
-피봇 테이블_만드는 법
: 먼저 베이스 데이터 만들고->이를 서브쿼리로 해서->if문을 포함한 본쿼리 작성
단, if문에는 max함수를 붙여줘야 함!
-개발에서 *는 모두를 선택. 전체에 적용해달라는 뜻임
-link-css와 탭으로 자동완성시키고. style css파일 새로 생성해서 잘라 붙이기
->css가 직접 적혀있지 않아도, 파일을 통해 꾸며짐
-Bootstrap이용하여 웹 만들기 실습
-구글 폰트 사용법
주의할 점
-앞으로는 습관적으로 () 적어두고 빈칸 채우는 식으로 연습할 것
->그래야 서브쿼리문 쓸 때도 유용.
습관 안되면 빈칸을 안닫는 실수할 수 있고, 괄호 시작과 끝을 파악하기 어려움
-count(rating)과 count(if(rating<>'Not given', rating, null))의 차이
: 전자는 'Not given'도 0으로 간주하고 전부 연산에 포함함(=SQL 디폴트),
후자는 Not given은 연산에서 제외해달라고 했기 때문에_연산에 차이 있을 수 밖에 없음
like. (0+0+5+3+4+3)/6과 (5+3+4+3)/4의 차이. 후자의 값이 더 클 수밖에 없음!
-서브쿼리문 작성시에는 중간중간 실행하면서 하는게 좋은데.
1줄 이상 띄우면 서로 다른 쿼리로 인식함. 원하는 쿼리에 커서 두고 실행하면 됨
-함수는 ()와 함께인 게 기본.
-select문에 min(), max(), sum(), avg() 등과 같이 연산이 들어갈 때는 필연적으로 group by로 범주 줘야함
'TIL' 카테고리의 다른 글
[TIL 2024. 01. 16] (0) | 2024.01.16 |
---|---|
[TIL 2024. 01. 15] (0) | 2024.01.15 |
[TIL 2024. 01. 11] (0) | 2024.01.11 |
[TIL 2024. 01. 10] (0) | 2024.01.10 |
[TIL 2024. 01. 09] (0) | 2024.01.09 |