지난 시간 SQL 코드 실습을 시작했는데 뭐 배운게 있어야 문제를 풀지 ㅎㅎㅎㅎㅎㅎ아나 진짜..
개인공부 열심히 하자..
📍JOIN
JOIN 에는
LEFT JOIN,INNER JOIN를 가장 많이 쓰는데
LEFT JOIN 은 from에 나오는 테이블과 겹치는것이다. 왼쪽에 붙여라
INNER JOIN은
Q6. 공판장품목별입출고현황 테이블과 공판장품목별재고현황 테이블을 이용해 기준 일자가 2023.9.2. 인 공판장품목별 수산물품목에 대한 입,출고량과 재고량을 모두 구하세요.
SELECT a.warehouse_code, a.warehouse_name, a.product_code, a.product_name, b.inventory_quantity, a.stock_quantity, a.shipment_quantity
FROM root.공판장품목별입출고현황 a
left Join root.공판장품목별재고현황 b
on a.warehouse_code = b.warehouse_code
and a.product_code = b.product_code
WHERE a.stock_date = '2023.9.2'
AND b.stock_date = '2023.9.2';
여기서 알아야 할 JOIN!!
어제도 JOIN에 막혔었는데 오늘도 나를 힘들게 하는 JOIN...
📍DISTINCT
DISTINCT는 주로 중복값이 있을 경우 사용한다.
UNIQUE(중복을 제거)한 컬럼이나 레코드를 조회하는 경우인데
GROUP BY랑 거의 비슷한 역할을 하기에 동일하다고 생각할 수 있지만
집계함수를 사용하여 특정 그룹을 구분할 때는 GROUP BY 를 사용하고
특정 그룹 구분없이 중복된 데이터를 제거할 경우에는 DISTINCT를 사용한다.
# ddd의 중복값을 제외한 합계를 출력한다
SELECT aaa, bbbb,SUM(DISTINCT ddd)
# ddd의 중복값을 제외한 평균을 출력한다
SELECT aaa, bbbb,AVG(DISTINCT ddd)
# ddd의 최대값을 출력한다
SELECT aaa, bbbb, MAX(DISTINCT ddd)
# ddd의최소값을 출력한다
SELECT aaa, bbbb,MIN(DISTINCT ddd)
Q8. 공판장품목별입출고현황 테이블에서 공판장 별 상태가공분류코드가 몇 개 존재하는지 확인하세요.
SELECT warehouse_code, warehouse_name,COUNT(DISTINCT product_category)
FROM root.공판장품목별입출고현황
GROUP BY warehouse_code, warehouse_name
📍HAVING 절
집계함수를 가지고 조건 비교를 할 때 사용 (WHERE은 집계함수 사용 x
➡️ SELECT, HAVING,ORDER BY 절만 집계함수 가능 )
GROUP BY 절과 함께 사용됨 (기본적으로 GROUP BY절 - HAVING절 순서지만 반대로도 가능!)
Q9. 모든 물류센터에 대해서 보관 방법이 냉동이고 누적 입고량이 1000 이상인 상품에 대한 정보를 나타내는 테이블을 생성하세요
SELECT warehouse_code, warehouse_name, product_code, product_name,
product_category_name, SUM(stock_quantity)
FROM root.공판장품목별입출고현황
WHERE product_category_name ='(냉동)'
GROUP BY 1,2,3,4,5
HAVING SUM(stock_quantity) >= 1000
🍯 여기서 꿀팁!
Group BY 에 숫자로 넣었는데 SELECT에 있는 컬럼명을 다 안쓰고 숫자로 지정가능하다.
(ORDER BY에서도 숫자 사용가능!)
❓만약 warehouse_name에 물류센터 외에도 물류사업소, 공판장 등 포함되어 있으니
물류센터만 뽑으려면??
select warehouse_code, warehouse_name, product_code,
product_name, product_category_name,
SUM(stock_quantity) as "누적입고량"
from 공판장품목별입출고현황
where product_category_name ="(냉동)"
and warehouse_name like "%물류센터"
group by 1,2,3,4,5
having 누적입고량 >= 1000
order by 누적입고량 DESC;
이렇게 코드 쓸수도 있다.
LIKE "%물류센터"
SQL을 잘한다고 하는 사람은
JOIN과 GROUP BY 를 잘하는 사람이다라고 하시는데
이거 아니여도 에러가 나서 풀지를 못하는 나란사람...
화..화이팅...!
'성동 1기_ 모빌리티 전Z전능 DA' 카테고리의 다른 글
SQL 팀프로젝트 (2) - EDA 분석, NULL 값 치환, 가설 세우기 (1) | 2023.11.22 |
---|---|
SQL 팀프로젝트 (1) - 공공데이터를 활용한 데이터 정합성 분석(NULL 값, 중복 값, count) (1) | 2023.11.20 |
DAY 23 - 스타트업 vs 대기업 / SQL 짝코딩 (0) | 2023.11.15 |
DAY 21 - 마케팅 데이터 분석 (마케팅 데이터 리터러시) (1) | 2023.11.15 |
DAY 22 - 데이터 리터러시 & SQL 복습 및 (1) | 2023.11.14 |