SQL 프로젝트 2일차
❇️ 오늘 배운 내용
1. 데이터 전처리 일부
2. 가설 검증을 위한 쿼리 작성
3. 엑셀로 일부 시각화
미완. 수정될 수 있음.
주요 개념
WITH | ||||||
오전 강의
| 소제목
요약
- 전처리
업데이트하는 거 내가 쓰려다가 팀원이 한 거 긁어옴
erd 관계도 정립
-- 지역별 그거 안해도 된다고 함
기본키 외래키 외에 몰라도 된다고 함.
마케팅, 판매 쪽으로만 가지 말고 고객 입장에서도 고려해보자
컷오프
토탈피킹
오더피킹
null값 있어야 할 것과 없어도 될 것 구분
다른분들이 구해서 갯수 적어놓으심.
기본키 고유값 1 2 3 4 로 변경 ?
안필요할 거 같아서 일단 안함.
제품명 외 번역할 수 있는 부분 번역
용량에 따라 로컬 파일이 아닐 수도 있으니...
데이터 파일 위치 옮길 때 대처법
파이썬은 불러오는 파일 경로를 입력해야 되어서 어디에 저장하는지가 중요했다.
경로가 '/하뇨니/꺄뿌삐쀼/분떡자료드으을/dataset' 이러면 곤란하니까;;
SQL은 한번 불러와서 데이터베이스 안에 저장해놓으면 일일이 경로 안쳐도 되어서 편함.
근데 문제는... 폴더 이동되어도 마찬가지인가?
- 발표
원본
꾸민 것
발표자료 꾸몄다 .
ㄹㄹ
노션 pc 앱 설치
가설 검증을 하기 위해 필요한 컬럼이 뭔지
내 개인페이지
왜냐면 탭 여러 개 키는...
그다음 데이터 구조 정리된 거 보면서
어케 할지를...
모든 열의 NULL 갯수를 한번에 보기
이 얘기 나오길래 급 꽂힘;;
쉬운 방법 (노가다)
응 이미 알고 있었어...
실제로 질무넹도 막... 어 (캡쳐)
but.
방법1.
null 값, 테이블 정보 관련 함수 더 찾아보기
information_schema 찾아보기
방법2. 디비버 기능 뜯어보기
방법 3
COALESCE 로 NULL 값을 특정 값으로 변경하고
LIKE로 검색. LIKE를 전체 테이블에서 검색할 수 있는 방법 찾기
LIKE로 NULL은 검색 안되는 거 같으니... 사실 LIKE로 검색할 바에는 걍 웨얼해서 찾음녀 되잔아
근데 NULL은 부분 패턴 일치도 아닌데 LIKE가 맞나?
정규 표현식이 답인가...??
방법4. 전문가가 만들어놓은 프로시저 활용
https://blog.naver.com/sqlmvp/220499723028
여기서 프로시저 만들어 놓으셨는데
이러면 like로 걍 검색할 수 있음 공백을 치환하기만 하면 ㅇㅇ
문제는
어케 적용해야 하는지?
내 거 버전이랑 맞는지?
이 분 블로그에 최신 버전용 프로시저 글 있는지?
방법 5
여기 글에서 테이블의 특정 테이블의 모든 컬럼 커멘트 조회가 있다고 함.
https://wms0603.tistory.com/10
근데 안먹힘 . 왜?? 오라클 쓰시나?
테이블에서 검색한다는데 이거 어케 쓰는지... 왜 안먹히는지.. 이거 NULL값도 검색 가능하려나...
SELECT * FROM ALL_COL_COMMENTS WHERE TABLE_NAME = '테이블명';
FROM 뒤에 붙는 ALL_COL_COMMENTS ??
--
여기 글에서 말하는 '테이블의 모든 컬럼명 검색'
select column_name from information_schema.columns where table_name = 'order_reviews';
이거랑
SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '테이블명';
SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '테이블명';
이거랑 구조가 비슷한 거 보니까
이런 방법도 분명 있는 모양인데..
--
ALL_TAB_COLUMNS , USER_TAB_COLUMNS 가 내 거 버전이나 디비버나 MYSQL에선 안먹히나?
아님 USER_TAB.COLUMNS 여야 하나?
information_schema 인자 중엔 NULL값만 추려주고 세주는 거 없는지?
FROM 뒤에 테이블명 말고도 붙을 수 있는 함수들?인자들? 술어들? 알아보면 좋을듯.
개발자 커뮤니티에 물어도 될 것 같고.
오후 강의
| 내가 한 것
요약
뽑은 결과
- 프로덕트 선정
일단 대충 적어 지금 시각 밤 10시 넘었어 큰일났어
- 물건 제목의 글자수 대비 주문 건수와 제품수, 주문 건수 대비 제품수 배수
- 제품 당 구매 횟수와 구매 횟수의 횟수와 그 비율- 시각화는X
- 한번에 주문한 물품 수와...뭐시기 < 차이가 너무 많이 나는디?
- 그외 다른 거... SQL 보면서 확인해야 ;;
무언가를 카운트한 걸로다가 평균 내고 뭐 하고 뭐 하기
- WITH 문
WITH [ 별명 ] AS ( SUB QUERY ) [SQL] WITH문
- 프로덕트 선정
| 기타
요약 생략?
- 모든 컬럼 이름 한눈에 보기
select column_name from information_schema.columns where table_name = 'order_reviews';
이 방법은 특정 테이블 컬럼 명 보는 것보다
전체 테이블에서 컬럼 이름 검색하고 싶을 때 유용하다.
만약 한 데이터 베이스 안에서 보고 싶다면 뷰 정보해가지고 관계도 보는 게 낫지 않을까?
전체 테이블의 컬럼 이름 정보를 보려면
select column_name from information_schema.columns;
출처: https://wotres.tistory.com/entry/sql-문-테이블의-전체-칼럼-이름-조회-하는-법 [Carl's Tech Blog:티스토리]
테이블 하나의 컬럼명 모두 보려면 사실 이게 더 빠름.
한눈에 볼 수 있도록 쫙 출력해주면 편하겠지만...
+) 이렇게도 할 수 있다는데 어카는지 모름
SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '테이블명';
SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '테이블명';
https://wms0603.tistory.com/10
- 상위 N개만 보기 - 나중에 비교 모을 때 정리하라고 적어놓은 것
파이썬은 그룹바이.헤드(N)
중복값 없으면 그룹바이 안해도 됨 핵심은 헤드
아님 유니크.헤드인가
SQL은 오덜바이해서 정렬 후
리밋 N 걸어놓으셈.
중복값은 그룹바이해서 묶거나 디스틴트(?) 술어 달아놓으셈.
근데 그룹바이 해서 딱 그 값만 뽑을 수 있...던 거 같은데?
그룹바이 할 거면 디스틴트 뭐시기가 더 쉽겠지만은
- 팀원이 짠 코드 퍼오기
ALTER TABLE orders
ADD COLUMN delivery_date_difference INT;
UPDATE orders
SET delivery_date_difference = DATEDIFF(order_delivered_customer_date, order_estimated_delivery_date);
SELECT
c.customer_city,
ROUND(AVG(o.delivery_date_difference), 0) AS avg_delivery_date_diff,
COUNT(o.delivery_date_difference) AS count_city
FROM
orders o
INNER JOIN
customers c ON o.customer_id = c.customer_id
GROUP BY
c.customer_city
HAVING
COUNT(o.delivery_date_difference) >= 30
ORDER BY
avg_delivery_date_diff DESC
평균 무게 당 배송 소요일 구하신 거 보니까
상위 N개인 각각의 카테고리 - 무거운, 배송 긴
그리고 브라질의 산업 특성이랑 지역에 공장 있는지랑 수입에 의존하는 카테고리 있는지
배송 소요일 - 평균무게 하면 어떨까 싶은
- 서브쿼리 오류를 차차 정복해라
서브쿼리를 능수능란하게 쓰려면 자주 나오는 오류를 모아서 알아놔야 함.
잘 모아서 기록해놓자.
그리고 내가 쳤던 오류 코드들 뜯어보면서 내가 자주 하는 실수가 무엇인지 파악하고
나중에 쿼리 문법 정리해놓을 때 함께 기록하자.
그리고 파이썬 때도 그렇지만... 활용 잘하려면 개념을 잘 알아야 함...
서브쿼리와 집계함수의 개념을 똑띠 알자...
즉..
- 공식문서 같은데서 서브쿼리 등의 개념을 팍팍 알기
- having 절 서브쿼리 등 절마다 쓸 때 차이점과 이유 같은 거 파악하기
- 자주 내는 오류 기록해놓기 (나중에 찾아서 정리할 수 있게)
---
Subquery returns more than 1 row
에러 원인 : 쿼리 구문에는 오류가 없지만, 서브쿼리에서 1개 이상의 값이 반환되는 것이다.
---
Operand should contains 1 column(s) 에러는 Error Based Sql Injection을 진행하는 과정에서 발생하는데
주로 where절에서 서브쿼리를 사용했을 때 발생한다.
에러를 해석해보자면 1 = (select 1, 2 from dual) 라는 구문이 있을 때 왼쪽에서는 1개의 column인데 오른쪽은 2개의 column이 서브쿼리의 결과로 나온다. 이 때 왼쪽의 컬럼의 갯수가 1개라는 부분이 에러에 드러나는 것이다.
조금 더 생각해보면 row(1, 1) = (select 1, 2, 3 from dual) 의 경우 왼쪽의 컬럼의 수가 2개기 떄문에
Operand should contains 2 column(s) 라는 에러가 발생할 것이라는 것을 예상해볼 수 있다.
때문에 에러기반 Sql Injection을 진행하면서 위와같은 에러를 보게 될 경우.
row(1, 1) 와 같은 함수를 통해서 컬럼수를 일치시켜줘서 해결이 가능하다.
https://ch4njun.tistory.com/88
+ 지피티가 알려준 거
WHERE (order_id, order_item_id) IN ( SELECT order_id, MAX(order_item_id) FROM order_items GROUP BY order_id )
따봉 지피티야 고마워!
💠 에러 정리해놓은 블로그 어디 없나?
- 강사님 추천
커리어 프로필 - 서핏 (surfit.io)
서핏을 활용해서 이력서를 작성하면 디자인(포맷)은 신경 쓸 필요 없이,
정보만 입력해도 깔끔한 이력서를 얻을 수 있어서 추천드립니다. ( 이력서를 PDF다운로드, URL 공유 가능)
서핏에서 제공하는 디렉토리 서비스 (서핏 디렉토리 - 함께 성장하는 커리어 커뮤니티 (surfit.io)) 를 사용해서
다른 사람들의 이력서도 볼 수 있으니 구경 해보세요~
여담
[회고]
나 제목에 맨날
[성동2기 전Z전능 데이터 분석가] 0622
이러던 거
처음에 가이드에서 붙이라고 해가지고 계속 붙였던 건데 사실 비효율적이라고 생각해.
제목은 배운 내용이어얒...!
#청년취업사관학교 #데이터분석가 #데이터분석가부트캠프 #DA교육 #데이터분석교육 #실무프로젝트 #실무경험 #취업포트폴리오 #포트폴리오 #취업연계교육 #코멘토 #모비니티
'새싹 데이터 분석 교육 (24.05.13~24.08.16) > TIL' 카테고리의 다른 글
멘토링 Day - 0719 (15) | 2024.07.22 |
---|---|
SQL 데이터 분석 프로젝트 6일차 - 0718 (0) | 2024.07.18 |
[성동2기 전Z전능 데이터 분석가] 0711 (1) | 2024.07.11 |
[성동2기 전Z전능 데이터 분석가] 0710 (0) | 2024.07.10 |
[성동2기 전Z전능 데이터 분석가] 0709 (1) | 2024.07.09 |