rubus0304 님의 블로그
[QCC 1회차] 본문
1문제
- Sales_SalesOrderDetail은 SalesOrderID를 통해 Sales_SalesOrderHeader와 외래 키 관계를 가집니다. 각 판매 주문 세부 정보는 특정 판매 주문 ID에 속합니다.
- Sales_SalesOrderHeader는 CustomerID를 통해 Sales_Customer 테이블과 외래 키 관계를 가집니다. 각 판매 주문 ID는 특정 고객과 연결되어 있습니다.
- Sales_Customer는 PersonID를 통해 Person_Person 테이블(BusinessEntityID)과 외래 키 관계를 가집니다. 이는 각 고객이 하나의 개인 정보와 연결됨을 의미합니다.
당신은 마케팅 팀의 일원으로서, 최근에 진행된 이메일 프로모션 캠페인에 관심이 있습니다. 해당 프로모션에 동의한 고객 수를 추산해야 합니다. 이메일 프로모션에 동의한 “개인(소매)” 고객의 수를 계산하여 출력하세요. 관련된 정보는 Person_Person 테이블에서 확인할 수 있습니다.
(오답)
select count(EmailPromotion) customer_count
from Person_Person pp join Sales_Customer sc on pp.BusinessEntityID = sc.CustomerID
where EmailPromotion > 0
** 개인(소매) 정보는 어디있을까
Person_Person PersonTyp = "IN"
(해설)
EmailPromtion 이 '0'이 아닌
select count(EmailPromotion) customer_count
from Person_Person pp join Sales_Customer sc on pp.BusinessEntityID = sc.CustomerID
where EmailPromotion > 0 and pp.PersonType='IN'
select count(EmailPromotion) customer_count
from Person_Person pp
where EmailPromotion <> 0 and pp.PersonType='IN'
** 이번 QCC 를 통해 알게 된 것!
1) Person Type = ' IN' 개인(소매) -> 테이블 정보 잘 확인하여 테이블, 필요 컬럼 파악!!
2) Join 을 해서 값이 달라짐 -> 불필요한 경우 JOIN 하면 값 달라짐!!!
2문제
당신의 회사는 지난 2011년 10월 동안 자사 제품을 많이 주문한 고객들에게 특별 할인 쿠폰을 제공할 예정입니다. 이를 위해 2011년 10월 한 달 동안 회사 제품을 총 70개 이상 주문한 고객들을 찾아야 합니다. 고객 ID로 오름차순 정렬해주세요.
이 고객들의 주문 기록 Sales_SalesOrderHeader에 있으며, Sales_SalesOrderDetail 테이블에는 해당 주문에 대한 세부정보(주문 수량, 상품ID 등)를 확인할 수 있습니다. 주문 수량은 OrderQty 컬럼에서 확인할 수 있습니다. 고객의 기본 정보는 Sales_Customer에서 확인할 수 있으며, 사람에 대한 개인정보는 Person_Person 테이블에 저장되어 있습니다. 각 테이블에 중복이 없다고 가정하겠습니다.
(오답 2-1)
SELECT CustomerID,
total_quantity
from
(select ssoh.CustomerID,
sum(ssod.OrderQty) total_quantity
from Sales_SalesOrderHeader ssoh join Sales_SalesOrderDetail ssod on ssoh.SalesOrderID = ssod.SalesOrderID
where OrderDate like "2011-10%"
group by 1) a
where total_quantity >=70
select ssoh.CustomerID,
pp.FirstName,
pp.LastName,
ssod.OrderQty
from Sales_SalesOrderHeader ssoh join Sales_SalesOrderDetail ssod join Person_Person pp join Sales_Customer sc on ssoh.SalesOrderId = ssod.SalesOrderID and sc.CustomerID=pp.BusinessEntityID and ssoh.CustomerID =sc.CustomerID
where OrderDate like "2011-10%")a
group by 1
order by 1
오답 (2-2)
SELECT CustomerID,
total_quantity
from
(select ssoh.CustomerID,
sum(ssod.OrderQty) total_quantity
from Sales_SalesOrderHeader ssoh join Sales_SalesOrderDetail ssod on ssoh.SalesOrderID = ssod.SalesOrderID
where OrderDate like "2011-10%"
group by 1) a
where total_quantity >=70
(해설)
위에 테이블 정보에 거의 다 답이 있음!!
select ssoh.CustomerID,
pp.FirstName,
pp.LastName,
sum(ssod.OrderQty) total_quantity
from Sales_SalesOrderDetail ssod join Sales_SalesOrderHeader ssoh on ssod.SalesOrderID = ssoh.SalesOrderID
join Sales_Customer sc on sc.CustomerID =ssoh.CustomerID
join Person_Person pp on sc.CustomerID =pp.BusinessEntityID
where OrderDate like "2011-10%"
group by 1,2,3
having sum(ssod.OrderQty) >= 70
order by 1
select ssoh.CustomerID,
pp.FirstName,
pp.LastName,
sum(ssod.OrderQty) total_quantity
from Sales_SalesOrderDetail ssod join Sales_SalesOrderHeader ssoh on ssod.SalesOrderID = ssoh.SalesOrderID
join Sales_Customer sc on sc.CustomerID =ssoh.CustomerID
join Person_Person pp on sc.PersonID =pp.BusinessEntityID
where OrderDate like "2011-10%"123123123
group by 1,2,3
having sum(ssod.OrderQty) >= 70
order by 1
**Join 컬럼이 잘못 된 것였음
" 애널리스트 sql 은 2시간에 3문제 / 난이도: 하, 중, 상 (하, 중 으로 해도 통과가능)
사이언티스트는 sql 과 파이썬 문제 "
" 앞에 있는 테이블 정보 많이 - 어느 테이블에 어느 컬럼 가져올 거냐 먼저 파악하는게 중요!"
"서류전형 - 사전테스트 - 라이브코딩 (초반 단계) (생략가능) - 면접 (상황판단, 리더십 principle 회사가치) "
"디비버에 복사해서 어떤게 필요한가 - 증거로 남기는게 중요! "
"주석 -- 풀다가 잘 모르겠는 문제 방식으로 했는데 가는 join 키 가 이렇게 하는거로 생각하고 이거로 했다"
"출력값은 예시일 수도 있어서 100% 믿지 말기.!! 결과값이 이렇게 생겨야 된다 ~ 이해를 돕기위해 만든 것!"
'Data Analyst > daily' 카테고리의 다른 글
[데이터분석] 코드카타 91 (0) | 2024.10.29 |
---|---|
[데이터 분석] 코드카타 90 (0) | 2024.10.28 |
[데이터 분석] 코드카타 89 (0) | 2024.10.25 |
[데이터분석] 코드카타 87~88 (0) | 2024.10.24 |
[데이터 분석] 코드카타 86 (0) | 2024.10.23 |