Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor Customers Model: Convert CTEs into Intermediate Models #2

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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)::bigint 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)::bigint 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
Loading