SQL & DB/PostgreSQL
[PostgreSQL] 값 비교 - 조건을 0과 1로 표현하기
YSY^
2023. 3. 5. 18:04
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
반응형