Skip to content

Commit d392039

Browse files
authored
Update Number of transactions per visit.sql
1 parent 0b08ae0 commit d392039

File tree

1 file changed

+33
-26
lines changed

1 file changed

+33
-26
lines changed

Hard/Number of transactions per visit.sql

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -83,31 +83,38 @@
8383
-- * For transactions_count >= 4, No customers visited the bank and did more than three transactions so we will stop at transactions_count = 3
8484

8585
-- Solution
86-
with recursive t1 as(
87-
(select visit_date, coalesce(num_visits,0) as num_visits, coalesce(num_trans,0) as num_trans
88-
from
89-
(select visit_date, user_id, count(*) as num_visits
90-
from visits
91-
group by 1, 2) a
92-
left join
93-
(select transaction_date, user_id, count(*) as num_trans
94-
from transactions
95-
group by 1, 2) b
96-
on a.visit_date = b.transaction_date and a.user_id = b.user_id)),
86+
WITH RECURSIVE t1 AS(
87+
SELECT visit_date,
88+
COALESCE(num_visits,0) as num_visits,
89+
COALESCE(num_trans,0) as num_trans
90+
FROM ((
91+
SELECT visit_date, user_id, COUNT(*) as num_visits
92+
FROM visits
93+
GROUP BY 1, 2) AS a
94+
LEFT JOIN
95+
(
96+
SELECT transaction_date,
97+
user_id,
98+
count(*) as num_trans
99+
FROM transactions
100+
GROUP BY 1, 2) AS b
101+
ON a.visit_date = b.transaction_date and a.user_id = b.user_id)
102+
),
97103

98-
t2 as(
99-
select max(num_trans) as trans
100-
from t1
101-
union all
102-
select trans-1 from t2
103-
where trans>=1
104-
)
104+
t2 AS (
105+
SELECT MAX(num_trans) as trans
106+
FROM t1
107+
UNION ALL
108+
SELECT trans-1
109+
FROM t2
110+
WHERE trans >= 1)
105111

106-
select trans as transactions_count, coalesce(visits_count,0) as visits_count
107-
from t2 left join
108-
(select num_trans as transactions_count, coalesce(count(*),0) as visits_count
109-
from t1
110-
group by 1
111-
order by 1) a
112-
on a.transactions_count = t2.trans
113-
order by 1
112+
SELECT trans as transactions_count,
113+
COALESCE(visits_count,0) as visits_count
114+
FROM t2 LEFT JOIN (
115+
SELECT num_trans as transactions_count, COALESCE(COUNT(*),0) as visits_count
116+
FROM t1
117+
GROUP BY 1
118+
ORDER BY 1) AS a
119+
ON a.transactions_count = t2.trans
120+
ORDER BY 1

0 commit comments

Comments
 (0)