Skip to content

Commit

Permalink
Convert CTEs in customers into intermediate models
Browse files Browse the repository at this point in the history
Signed-off-by: Even Wei <shinycockorach@gmail.com>
  • Loading branch information
even-wei authored and kentwelcome committed Mar 28, 2024
1 parent f42d47e commit 21de9d2
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 69 deletions.
85 changes: 16 additions & 69 deletions models/customers.sql
Original file line number Diff line number Diff line change
@@ -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
9 changes: 9 additions & 0 deletions models/int_customer_orders.sql
Original file line number Diff line number Diff line change
@@ -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
10 changes: 10 additions & 0 deletions models/int_customer_payments.sql
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 21de9d2

Please sign in to comment.