83
83
-- * For transactions_count >= 4, No customers visited the bank and did more than three transactions so we will stop at transactions_count = 3
84
84
85
85
-- 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
+ ),
97
103
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 )
105
111
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