I three tables:
Table Name: Customer
x
Column Name: Data Type: Description:
id integer Unique id for customer
company_id integer(FK to company.id) Unique id for a company that the customer works for
contact_name varchar Full name of customer
contact_email varchar Email of customer
create_dt date Date when customer added to database
Table Name: Company
Column Name: Data Type: Description:
id integer Unique id for company
company_name varchar Name of company
create_dt date Date when company added to database
converted boolean if customer was converted
converted_dt date Date company purchased the product Value is null if the company did not
Table Name: Contacted (actions/ how the customer was contacted)
Column Name: Data Type: Description:
customer_id integer(FK to Customer.id) Unique id for contact
rep_name varchar Name of the rep who made the contact with the customer
rep_email varchar Email of rep who made the contact
contact_channel varchar Channel used to contact the customer(email,phone, in-person )
contact_dt date Date of contact
I’m trying to write a query that to show the average number of customers that were contacted before they were successfully converted as a customer, on a company level. I’m able to get the number of counts before customers were successfully converted but not sure how to get the avg count and factor in instances where they were eventually converted.
COUNT(CASE WHEN converted = FALSE AND converted_dt is NULL THEN 1 ELSE 0 END) as contacts_made_before_conversion,
CASE WHEN Company.converted_dt is NOT null THEN count(contact_dt) over(partition by company_name order by contact_dt DESC END) as contacted_counts
FROM Contacted
LEFT JOIN
(SELECT Customer.id as customer_id , company_name,
Company.converted,
FROM Customer LEFT JOIN Company
ON Company.id = Customer.company_id) cc
ON cc.customer_id = Contacted.customer_id
GROUP BY company_name, customer_id
Advertisement
Answer
This is basically a left join
with aggregation:
select c.company_id,
count(distinct c.id) as num_customers,
count(co.id) as num_contacts,
count(co.id) * 1.0 / count(distinct c.id) as num_per_customer
from customer c left join
contacted co
on co.customer_id = c.id and
co.converted_dt < c.created_dt
group by c.company_id