DATASET QUERY
DROP TABLE IF EXISTS mst_users_with_card_number;
CREATE TABLE mst_users_with_card_number (
user_id varchar(255)
, card_number varchar(255)
);
INSERT INTO mst_users_with_card_number
VALUES
('U001', '1234-xxxx-xxxx-xxxx')
, ('U002', NULL )
, ('U003', '5678-xxxx-xxxx-xxxx')
;
DROP TABLE IF EXISTS purchase_log;
CREATE TABLE purchase_log (
purchase_id integer
, user_id varchar(255)
, amount integer
, stamp varchar(255)
);
INSERT INTO purchase_log
VALUES
(10001, 'U001', 200, '2017-01-30 10:00:00')
, (10002, 'U001', 500, '2017-02-10 10:00:00')
, (10003, 'U001', 200, '2017-02-12 10:00:00')
, (10004, 'U002', 800, '2017-03-01 10:00:00')
, (10005, 'U002', 400, '2017-03-02 10:00:00')
;
조건을 0과 1로 표현하는 방법
1. case when 을 활용
2. sign 함수를 활용
- 양수라면 1, 0이라면 0, 음수라면 -1로 판정합니다.
select
m.user_id
,m.card_number
,count(p.user_id) as purchase_count
,case when m.card_number is not null then 1 else 0 end as has_card
,sign(count(p.user_id)) as has_purchased
from mst_users_with_card_number as m
left join
purchase_log as p
on m.user_id = p.user_id
group by m.user_id, m.card_number
order by m.user_id
;
- has_card의 경우 카드를 가지고 있는지 여부를 확인하는 컬럼이며, case when 구문을 활용
-has_purchased의 경우 구매했는지 여부를 확인하는 방법이며 purchase 기록이 0이라면 0을 출력하고 1이상이면 1을 출력
728x90
반응형
'SQL & DB > PostgreSQL' 카테고리의 다른 글
[PostgreSQL/MYSQL] 날짜/시간 계산(INTERVAL타입, age함수) (DATEDIFF, TIMESTAMPDIFF) (0) | 2023.11.24 |
---|---|
[PostgreSQL] CSV File를 Table에 삽입(Import)하기. (2) | 2023.03.05 |
[PostgreSQL] 중복행 제거 (0) | 2023.02.18 |
[PostgreSQL] 사용자 로그데이터(Log Data) 시계열분석(2) - 행동(action)과 지속률/정착률과의 관계 분석 (0) | 2021.01.22 |
[PostgreSQL] 사용자 로그데이터(Log Data) 시계열분석(1) - 등록추이분석/지속률/정착률 (0) | 2021.01.18 |