person 테이블 이용하여,
이메일 프로모션을 수락한 개인(소매) 고객의 수를 계산하여 출력하시오
select count(business_entity_id) as customer_count
from person
where email_promotion in('1, 2') and person_type = 'IN'
이메일 프로모션을 수락 (1, 2)
개인(소매) 고객 = IN
email_promotion >= 1 또는 <> 0 으로 구하는 방법도 있다.
count(distinct 를 사용해도되지만,
business_entity_id가 PK라 중복이 없기 때문에 그냥 count 사용 가능
select count(distinct business_entity_id) as customer_count
from person
where person_type = 'IN' and email_promotion in (1, 2)
-- 8153 출력
DISTINCT를 잊지말자
항상 distinct를 내가 자주 까먹는 편이다.
이번에는 PK여서 다행히 괜찮지만 중복이 있을 수 있음을 항상 명시하자.
문제 풀기 전 TABLE 확인을 하자
select * 로 한번 테이블의 각 행별로 어떤 데이터값이 어떻게 들어가있는지 확인을 할 필요가 있다.
특히 중복값이 있는지, 한 행에 데이터가 ','로 연결되어서 여러 개가 입력되어 있는지 확인이 필요하다.
오더 헤더는 주문 정보 데이터
오더 디테일은 주문에 대한 세부 정보 데이터
세일즈 커스토머는 고객 정보
퍼슨은 고객 개인 정보
PK는 한 테이블에 한 개 이상 있을 수 있음!
그 테이블의 고유의 값이 됨
주석을 활용하여 내가 작성해야하는 데이터를 미리 입력해두면 좋다!
제대로 쿼리를 작성했는지 확인하려면 MIN, MAX로 중간에 확인 가능
잘 작성했다면 기간에 맞는 값이 잘 나올 것임
답안은 JOIN을 그냥 INNER JOIN으로 했는데 이번 문제에서는 상관이 없다고 함
그리고 조인할 때 전체 테이블 조인하지말고 원하는 컬럼만 가져와서 조인하는 것도 아주 좋은 것 시도다.