From 21de9d2e08d0b20bdcd138e1e0397782a6c988d2 Mon Sep 17 00:00:00 2001 From: Even Wei Date: Mon, 27 Nov 2023 17:36:41 +0800 Subject: [PATCH] Convert CTEs in customers into intermediate models Signed-off-by: Even Wei --- models/customers.sql | 85 ++++++-------------------------- models/int_customer_orders.sql | 9 ++++ models/int_customer_payments.sql | 10 ++++ 3 files changed, 35 insertions(+), 69 deletions(-) create mode 100644 models/int_customer_orders.sql create mode 100644 models/int_customer_payments.sql diff --git a/models/customers.sql b/models/customers.sql index 016a004f..67dd22a7 100644 --- a/models/customers.sql +++ b/models/customers.sql @@ -1,69 +1,16 @@ -with customers as ( - - select * from {{ ref('stg_customers') }} - -), - -orders as ( - - select * from {{ ref('stg_orders') }} - -), - -payments as ( - - select * from {{ ref('stg_payments') }} - -), - -customer_orders as ( - - select - customer_id, - - min(order_date) as first_order, - max(order_date) as most_recent_order, - count(order_id) as number_of_orders - from orders - - group by customer_id - -), - -customer_payments as ( - - select - orders.customer_id, - sum(amount) as total_amount - - from payments - - left join orders on - payments.order_id = orders.order_id - - group by orders.customer_id - -), - -final as ( - - select - customers.customer_id, - customers.first_name, - customers.last_name, - customer_orders.first_order, - customer_orders.most_recent_order, - customer_orders.number_of_orders, - customer_payments.total_amount as customer_lifetime_value - - from customers - - left join customer_orders - on customers.customer_id = customer_orders.customer_id - - left join customer_payments - on customers.customer_id = customer_payments.customer_id - -) - -select * from final +select + customers.customer_id, + customers.first_name, + customers.last_name, + customer_orders.first_order, + customer_orders.most_recent_order, + customer_orders.number_of_orders, + customer_payments.total_amount as customer_lifetime_value + +from {{ ref('stg_customers') }} customers + +left join {{ ref('int_customer_orders') }} customer_orders + on customers.customer_id = customer_orders.customer_id + +left join {{ ref('int_customer_payments') }} customer_payments + on customers.customer_id = customer_payments.customer_id diff --git a/models/int_customer_orders.sql b/models/int_customer_orders.sql new file mode 100644 index 00000000..eec8bc82 --- /dev/null +++ b/models/int_customer_orders.sql @@ -0,0 +1,9 @@ +select + customer_id, + + min(order_date) as first_order, + max(order_date) as most_recent_order, + count(order_id) as number_of_orders +from {{ ref('stg_orders') }} + +group by customer_id diff --git a/models/int_customer_payments.sql b/models/int_customer_payments.sql new file mode 100644 index 00000000..c4921329 --- /dev/null +++ b/models/int_customer_payments.sql @@ -0,0 +1,10 @@ +select + orders.customer_id, + sum(amount) as total_amount + +from {{ ref('stg_payments') }} payments + +left join {{ ref('stg_orders') }} orders on + payments.order_id = orders.order_id + +group by orders.customer_id