

/* 기본 주문 정보 (주문 수, 총 금액 ) */
SELECT
COUNT(DISTINCT order_id) AS unique_orders, -- 전체 주문 건수
SUM(price) AS ord_amt, -- 주문 금액 총합
FROM `olist.olist_order_items`;
/* 기본 주문 정보 (주문 수, 총 금액 ) */
SELECT
COUNT(DISTINCT order_id) AS unique_orders, -- 전체 주문 건수
SUM(price) AS ord_amt, -- 주문 금액 총합
SUM(price) / COUNT(DISTINCT order_id) AS amount_per_order -- 주문 금액 총합 / 주문 건수
FROM `olist.olist_order_items`;
Customer_id는 매 주문건마다 새로 생성됨order_item_id는 주문건 내 동일 상품이 있는 경우 증가함
주문 테이블 내 주문건수와 고객번호수는 일치한다
customer_id가 달라도 같은 고객일 수 있다
고객정보 테이블에 customer_unique_id가 있다

order_item_id를 모두 더하면 안된다!



SELECT
FROM `olist.olist_order_items`
SELECT
SUM(price) AS ord_amt, -- 총매출
COUNT(DISTINCT order_id) AS ord_cnt, -- 전체 주문 건수
FROM `olist.olist_order_items`;

SELECT
SUM(price) AS ord_amt, -- 총매출
COUNT(DISTINCT order_id) AS ord_cnt, -- 전체 주문 건수
SUM(price) / COUNT(DISTINCT order_id) AS amount_per_order -- 주문 1건당 평균 가격
FROM `olist.olist_order_items`;


customer_id는 매 주문 건마다 생성! 고객의 고유 고객번호가 아님!

/* 테이블 조인하기 */
SELECT
ord.order_id,
ord.customer_id,
cust.customer_unique_id
FROM `olist.olist_orders` AS ord
LEFT JOIN `olist.olist_customers` AS cust
ON ord.customer_id = cust.customer_id;
/* 주문 고객 unique 세기 */
SELECT
COUNT(DISTINCT ord.order_id) AS ord_cnt, -- 주문건수 세기
COUNT(DISTINCT ord.customer_id) AS cust_cnt, -- 참고. 주문건의 고객id 세기(주문건수와 같음)
COUNT(DISTINCT cust.customer_unique_id) AS unique_cust_cnt-- 고객 고유 id 세기
FROM `olist.olist_orders` AS ord -- 주문정보 테이블
LEFT JOIN `olist.olist_customers` AS cust -- 고객정보 테이블
ON ord.customer_id = cust.customer_id; -- join 조건 : 주문 건의 고객 id
/* 주문빈도까지 조회 */
SELECT
COUNT(DISTINCT ord.order_id) AS ord_cnt, -- 주문건수 세기
COUNT(DISTINCT cust.customer_unique_id) AS unique_cust_cnt, -- 고객 고유 id 세기
COUNT(DISTINCT ord.order_id) / COUNT(DISTINCT cust.customer_unique_id) AS frequency -- 주문빈도
FROM `olist.olist_orders` AS ord -- 주문정보 테이블
LEFT JOIN `olist.olist_customers` AS cust -- 고객정보 테이블
ON ord.customer_id = cust.customer_id; -- join 조건 : 주문 건의 고객 id
SELECT
ord.order_id,
ord.customer_id,
cust.customer_unique_id
FROM `olist.olist_orders` AS ord
LEFT JOIN `olist.olist_customers` AS cust
ON ord.customer_id = cust.customer_id;

SELECT
COUNT(order_id),
COUNT(DISTINCT order_id)
FROM `olist.olist_orders` AS ord

SELECT
COUNT(DISTINCT ord.order_id) AS ord_cnt, -- 주문건수 세기
COUNT(DISTINCT ord.customer_id) AS cust_cnt, -- 고객 id 세기
COUNT(DISTINCT cust.customer_unique_id) AS unique_cust_cnt -- 고객 고유 id 세기
FROM `olist.olist_orders` AS ord
LEFT JOIN `olist.olist_customers` AS cust
ON ord.customer_id = cust.customer_id;

SELECT
COUNT(DISTINCT ord.order_id) AS `주문건수`, -- 주문건수 세기
COUNT(DISTINCT cust.customer_unique_id) AS `주문고객수`, -- 고객 고유 id 세기
COUNT(DISTINCT ord.order_id) / COUNT(DISTINCT cust.customer_unique_id) AS `주문빈도` -- 주문빈도
FROM `olist.olist_orders` AS ord
LEFT JOIN `olist.olist_customers` AS cust
ON ord.customer_id = cust.customer_id;





order_id 수 세기
order_item_id를 모두 더하면 안된다!order_item_id를 세어야 한다!

/* 총 매출, 주문건수 집계 */
SELECT
SUM(price) AS ord_amt, -- 총 매출
COUNT(DISTINCT order_id) AS ord_cnt, -- 주문 건수
SUM(price) / COUNT(DISTINCT order_id) AS amount_per_order -- 주문 당 평균 가격
FROM `olist.olist_order_items` AS ord; -- 주문정보 테이블

/* 총 판매 상품 수, 주문건수 집계 */
SELECT
COUNT(order_item_id) AS prd_cnt, -- 총 판매 상품 수(합치는것X, 세는방식으로 구해야함)
COUNT(DISTINCT order_id) AS ord_cnt, -- 주문 건수
COUNT(order_item_id) / COUNT(DISTINCT order_id) AS unit_per_order -- 주문 당 평균 판매상품 수
FROM `olist.olist_order_items` AS ord; -- 주문정보 테이블

/* 상품 평균 가격, 총 판매 상품 수 집계 */
SELECT
SUM(price) AS ord_amt, -- 총 매출
COUNT(order_item_id) AS prd_cnt, -- 총 판매 상품 수
SUM(price) / COUNT(order_item_id) AS average_selling_price -- 판매 제품 당 평균 가격
FROM `olist.olist_order_items` AS ord; -- 주문정보 테이블
/* 합치면 */
SELECT
SUM(price) AS ord_amt, -- 총 매출
COUNT(DISTINCT order_id) AS ord_cnt, -- 주문 건수
COUNT(order_item_id) AS prd_cnt, -- 총 판매 상품 수
SUM(price) / COUNT(DISTINCT order_id) AS amount_per_order, -- 주문 당 평균 가격
COUNT(order_item_id) / COUNT(DISTINCT order_id) AS unit_per_order, -- 주문 당 평균 판매상품 수
SUM(price) / COUNT(order_item_id) AS average_selling_price -- 판매 제품 당 평균 가격
FROM `olist.olist_order_items` AS ord -- 주문정보 테이블
/* 체크 */
with tb AS (
SELECT
SUM(price) AS ord_amt, -- 총 매출
COUNT(DISTINCT order_id) AS ord_cnt, -- 주문 건수
COUNT(order_item_id) AS prd_cnt, -- 총 판매 상품 수
SUM(price) / COUNT(DISTINCT order_id) AS amount_per_order, -- 주문 당 평균 가격
COUNT(order_item_id) / COUNT(DISTINCT order_id) AS unit_per_order, -- 주문 당 평균 판매상품 수
SUM(price) / COUNT(order_item_id) AS average_selling_price -- 판매 제품 당 평균 가격
FROM `olist.olist_order_items` AS ord -- 주문정보 테이블
)
SELECT
tb.amount_per_order, -- 건당 주문 금액
tb.unit_per_order * tb.average_selling_price AS check_1 , -- 주문 당 평균 판매상품 수 * 판매 상품 당 평균 가격
tb.prd_cnt, -- 총 판매 상품 수
tb.unit_per_order * tb.ord_cnt AS check_2 , -- 주문 당 평균 판매상품 수 * 주문 수
tb.ord_amt, -- 총 매출
tb.prd_cnt * tb.average_selling_price AS check_3 -- 총 판매 상품 수 * 판매 상품 당 평균 금액
FROM tb;
/* 총 매출, 주문 건수 > 주문 1건당 평균 가격 */
SELECT
SUM(price) AS `총 매출`,
COUNT(DISTINCT order_id) AS `총 주문수`,
SUM(price) / COUNT(DISTINCT order_id) AS `주문당 평균 가격`
FROM `olist.olist_order_items` AS ord;

SELECT
COUNT(order_item_id) AS `총 판매상품수`,
COUNT(DISTINCT order_id) AS `총 주문수`,
COUNT(order_item_id) / COUNT(DISTINCT order_id) AS `평균판매상품수`
FROM `olist.olist_order_items` AS ord;

SELECT
SUM(price) AS `총 매출`,
COUNT(order_item_id) AS `총 판매상품수`,
SUM(price) / COUNT(order_item_id) AS `제품개당평균가격`
FROM `olist.olist_order_items` AS ord;

SELECT
SUM(price) AS `총 매출`,
COUNT(DISTINCT order_id) AS `총 주문수`,
COUNT(order_item_id) AS `총 판매상품수`,
SUM(price) / COUNT(DISTINCT order_id) AS `주문당 평균 가격`,
COUNT(order_item_id) / COUNT(DISTINCT order_id) AS `평균판매상품수`,
SUM(price) / COUNT(order_item_id) AS `제품개당평균가격`
FROM `olist.olist_order_items` AS ord;

WITH tb AS (
SELECT column1, column2, ...
FROM tablename
)
WITH tb AS (
SELECT column1, column2, ...
FROM tablename
)
, tb2 AS (
SELECT column3, column4, ...
FROM tablename2
)
WITH tb AS (
SELECT column1, column2, ...
FROM tablename
)
-- , tb2 AS (
SELECT column3, column4, ...
FROM tablename2
-- )
/* 체크 */
WITH tb AS (
SELECT
SUM(price) AS `총 매출`,
COUNT(DISTINCT order_id) AS `총 주문수`,
COUNT(order_item_id) AS `총 판매상품수`,
SUM(price) / COUNT(DISTINCT order_id) AS `주문당 평균 가격`,
COUNT(order_item_id) / COUNT(DISTINCT order_id) AS `평균판매상품수`,
SUM(price) / COUNT(order_item_id) AS `제품개당평균가격`
FROM `olist.olist_order_items` AS ord
)
SELECT *
FROM tb;

SELECT
tb.`주문당 평균 가격`,
tb.`평균판매상품수` * tb.`제품개당평균가격` AS check_1,
tb.`총 판매상품수`,
tb.`평균판매상품수` * tb.`총 주문수` AS check_2
tb.`총 매출`,
tb.`주문당 평균 가격` * tb.`총 판매상품수` AS check_3
FROM tb;




SELECT
item.order_id,
SUM(item.price) AS ord_amt,
COUNT(item.order_item_id) AS prd_cnt
FROM `olist.olist_order_items` AS item -- 주문 상품 정보 테이블
GROUP BY item.order_id; -- 집계 기준 : 주문 번호

/* 첫번째 */
WITH tb AS (
SELECT
item.order_id,
SUM(item.price) as ord_amt,
COUNT(item.order_item_id) as prd_cnt
FROM `olist.olist_order_items` AS item
GROUP BY item.order_id
)
/* 두번째 */
SELECT
ord.order_id,
ord.order_status,
ord.customer_id,
cust.customer_unique_id,
tb.ord_amt,
tb.prd_cnt
FROM `olist.olist_orders` AS ord
LEFT JOIN `olist.olist_customers` AS cust -- 고객 unique ID
ON ord.customer_id = cust.customer_id
INNER JOIN tb -- 1번 결과
ON ord.order_id = tb.order_id

/* 첫번째 */
WITH tb AS (
SELECT
item.order_id,
SUM(item.price) as ord_amt,
COUNT(item.order_item_id) as prd_cnt
FROM `olist.olist_order_items` AS item
GROUP BY item.order_id
)
/* 두번째 */
, base AS (
SELECT
ord.order_id,
ord.order_status,
ord.customer_id,
cust.customer_unique_id,
tb.ord_amt,
tb.prd_cnt
FROM `olist.olist_orders` AS ord
LEFT JOIN `olist.olist_customers` AS cust -- 고객 unique ID
ON ord.customer_id = cust.customer_id
INNER JOIN tb -- 1번 결과
ON ord.order_id = tb.order_id
)
/* 세번째 */
SELECT
SUM(ord_amt) AS `총 매출`,
COUNT(DISTINCT order_id) AS `총 주문수`,
COUNT(prd_cnt) AS `총 판매상품수`,
SUM(ord_amt) / COUNT(DISTINCT order_id) AS `주문당 평균 가격`,
COUNT(prd_cnt) / COUNT(DISTINCT order_id) AS `평균판매상품수`,
SUM(ord_amt) / COUNT(prd_cnt) AS `제품개당평균가격`,
COUNT(DISTINCT customer_unique_id) AS `주문고객수`,
COUNT(DISTINCT order_id) / COUNT(DISTINCT customer_unique_id) AS `주문빈도`
FROM base
