QCC -1 회

김주호·2024년 10월 25일





  • Sales_SalesOrderDetail은 SalesOrderID를 통해 Sales_SalesOrderHeader와 외래 키 관계를 가집니다. 각 판매 주문 세부 정보는 특정 판매 주문 ID에 속합니다.
  • Sales_SalesOrderHeader는 CustomerID를 통해 Sales_Customer 테이블과 외래 키 관계를 가집니다. 각 판매 주문 ID는 특정 고객과 연결되어 있습니다.
  • Sales_Customer는 PersonID를 통해 Person_Person 테이블(BusinessEntityID)과 외래 키 관계를 가집니다. 이는 각 고객이 하나의 개인 정보와 연결됨을 의미합니다.

1번 문제


당신은 마케팅 팀의 일원으로서, 최근에 진행된 이메일 프로모션 캠페인에 관심이 있습니다. 해당 프로모션에 동의한 고객 수를 추산해야 합니다. 이메일 프로모션에 동의한 “개인(소매)” 고객의 수를 계산하여 출력하세요. 관련된 정보는 Person_Person 테이블에서 확인할 수 있습니다.
출력 값 예시


customer_count (고객수)
+----------------+
| customer_count |
+----------------+
| 8153           |
+----------------+

풀이 / 정답

select count(*) customer_count
from Person_Person
where EmailPromotion in (1, 2) and PersonType like 'IN'
;
#### 출력 값 예시
customer_count (고객수)
#이메일 프로모션에 동의한 EmailPromotion = 1, 2 받음 / 0 안받음 / “개인(소매)” PersonType = IN(개인) / 고객의 수를 계산 count / where in(), like



## 2번 문제

---

당신의 회사는 지난 2011년 10월 동안 자사 제품을 많이 주문한 고객들에게 특별 할인 쿠폰을 제공할 예정입니다. 이를 위해 **2011년 10월 한 달 동안** 회사 제품을 **총 70개 이상** 주문한 고객들을 찾아야 합니다. **고객 ID**로 오름차순 정렬해주세요. 

이 고객들의 주문 기록 `Sales_SalesOrderHeader`에 있으며, `Sales_SalesOrderDetail` 테이블에는 해당 주문에 대한 세부정보(주문 수량, 상품ID 등)를 확인할 수 있습니다. 주문 수량은 `OrderQty` 컬럼에서 확인할 수 있습니다. 고객의 기본 정보는 `Sales_Customer`에서 확인할 수 있으며, 사람에 대한 개인정보는 `Person_Person` 테이블에 저장되어 있습니다. 각 테이블에 중복이 없다고 가정하겠습니다. 

---

### 출력 값 예시

`customer_id` (고객 ID), `first_name` (이름), `last_name` (성), `total_quantity` (총 주문 수량)
```sql
+-------------+------------+-------------+----------------+
| customer_id | first_name | last_name   | total_quantity |
+-------------+------------+-------------+----------------+
| 29486       | Kim        | Abercrombie | 92             |
| 29510       | Cecil      | Allison     | 115            |
| 29525       | Teresa     | Atkinson    | 103            |
					 							  ...
+-------------+------------+-------------+----------------+

풀이 / 정답

SELECT c.customerid as customer_id
	, p.firstname as first_name
	, p.lastname as last_name
	, SUM(so.orderqty) AS total_quantity
FROM adventureworks.Sales_Customer c
INNER JOIN adventureworks.Person_Person p ON c.personid = p.businessentityid
INNER JOIN adventureworks.Sales_SalesOrderHeader soh ON c.customerid = soh.customerid
INNER JOIN adventureworks.Sales_SalesOrderDetail so ON soh.salesorderid = so.salesorderid
WHERE DATE(orderdate) BETWEEN '2011-10-01' AND '2011-10-31'
group by c.customerid, p.firstname, p.lastname
HAVING SUM(so.orderqty) >= 70
order BY c.customerid  
;
# 출력 값 예시 customer_id, first_name, last_name, total_quantity
# join이 두번.....흠..
# 출력 값 예시 customer_id, first_name, last_name, total_quantity
# 2011년 10월 한달 where between / 제품 70개 이상 주문 >= / order by customer_id asc 오름차순
# Sales_SalesOrderDetail = OrderQty(주문수량) / d에서 주문 수량=OrderQty

0개의 댓글