runtime
49 / 88

lesson 49 Advanced product analysis · advanced

Capstone: customer insights

Bring filtering, joins and aggregation together for customer analysis.

the idea

A customer report combines what you have learned: join lines to orders and products, aggregate net sales at the customer or category grain, and rank the totals. Decide the grain first, then the measures, then the ranking.

Dataset: Retail

The tables the challenges use, with their first 6 rows. Under each column name: the kind of value it holds, and which table it links to.

orders6 columns · 6,722 rows
order_idnumber · unique idinvoice_notextcustomer_idnumber · links to customersordered_atdate & timecountrytextorder_typetext
1489438181022009-12-01 09:24:00United Kingdomsale
2489517163292009-12-01 11:34:00United Kingdomsale
3C489528167142009-12-01 11:50:00United Kingdomcancellation
4489529179842009-12-01 11:51:00United Kingdomsale
5489532133942009-12-01 11:58:00United Kingdomsale
6489540129132009-12-01 12:18:00United Kingdomsale
order_idnumber · unique id
1
invoice_notext
489438
customer_idnumber · links to customers
18102
ordered_atdate & time
2009-12-01 09:24:00
countrytext
United Kingdom
order_typetext
sale
order_idnumber · unique id
2
invoice_notext
489517
customer_idnumber · links to customers
16329
ordered_atdate & time
2009-12-01 11:34:00
countrytext
United Kingdom
order_typetext
sale
order_idnumber · unique id
3
invoice_notext
C489528
customer_idnumber · links to customers
16714
ordered_atdate & time
2009-12-01 11:50:00
countrytext
United Kingdom
order_typetext
cancellation
order_idnumber · unique id
4
invoice_notext
489529
customer_idnumber · links to customers
17984
ordered_atdate & time
2009-12-01 11:51:00
countrytext
United Kingdom
order_typetext
sale
order_idnumber · unique id
5
invoice_notext
489532
customer_idnumber · links to customers
13394
ordered_atdate & time
2009-12-01 11:58:00
countrytext
United Kingdom
order_typetext
sale
order_idnumber · unique id
6
invoice_notext
489540
customer_idnumber · links to customers
12913
ordered_atdate & time
2009-12-01 12:18:00
countrytext
United Kingdom
order_typetext
sale

first 6 of 6,722 rows · your queries use all of them

order_items7 columns · 125,613 rows
order_item_idnumber · unique idorder_idnumber · links to ordersline_numbernumberstock_codetext · links to productsdescriptiontextquantitynumberunit_pricedecimal
11121329DINOSAURS WRITING SET280.98
21221252SET OF MEADOW FLOWER STICKERS301.69
31321100CHARLIE AND LOLA CHARLOTTE BAG301.15
41421033JUMBO BAG CHARLIE AND LOLA TOYS302
51520711JUMBO BAG TOYS601.3
61621410COUNTRY COTTAGE DOORSTOP GREEN322.5
order_item_idnumber · unique id
1
order_idnumber · links to orders
1
line_numbernumber
1
stock_codetext · links to products
21329
descriptiontext
DINOSAURS WRITING SET
quantitynumber
28
unit_pricedecimal
0.98
order_item_idnumber · unique id
2
order_idnumber · links to orders
1
line_numbernumber
2
stock_codetext · links to products
21252
descriptiontext
SET OF MEADOW FLOWER STICKERS
quantitynumber
30
unit_pricedecimal
1.69
order_item_idnumber · unique id
3
order_idnumber · links to orders
1
line_numbernumber
3
stock_codetext · links to products
21100
descriptiontext
CHARLIE AND LOLA CHARLOTTE BAG
quantitynumber
30
unit_pricedecimal
1.15
order_item_idnumber · unique id
4
order_idnumber · links to orders
1
line_numbernumber
4
stock_codetext · links to products
21033
descriptiontext
JUMBO BAG CHARLIE AND LOLA TOYS
quantitynumber
30
unit_pricedecimal
2
order_item_idnumber · unique id
5
order_idnumber · links to orders
1
line_numbernumber
5
stock_codetext · links to products
20711
descriptiontext
JUMBO BAG TOYS
quantitynumber
60
unit_pricedecimal
1.3
order_item_idnumber · unique id
6
order_idnumber · links to orders
1
line_numbernumber
6
stock_codetext · links to products
21410
descriptiontext
COUNTRY COTTAGE DOORSTOP GREEN
quantitynumber
32
unit_pricedecimal
2.5

first 6 of 125,613 rows · your queries use all of them

categories3 columns · 17 rows
category_idnumber · unique idcategory_nametextdepartmenttext
1Christmas & SeasonalSeasonal
2Candles & LightingHome
3Kitchen & DiningHome
4Home DecorHome
5Storage & OrganisationHome
6Bags & AccessoriesFashion
category_idnumber · unique id
1
category_nametext
Christmas & Seasonal
departmenttext
Seasonal
category_idnumber · unique id
2
category_nametext
Candles & Lighting
departmenttext
Home
category_idnumber · unique id
3
category_nametext
Kitchen & Dining
departmenttext
Home
category_idnumber · unique id
4
category_nametext
Home Decor
departmenttext
Home
category_idnumber · unique id
5
category_nametext
Storage & Organisation
departmenttext
Home
category_idnumber · unique id
6
category_nametext
Bags & Accessories
departmenttext
Fashion

first 6 of 17 rows · your queries use all of them

products6 columns · 5,304 rows
stock_codetext · unique iddescriptiontextcategory_idnumber · links to categorieslist_pricedecimalfirst_sold_atdate & timeis_merchandisenumber
10002INFLATABLE POLITICAL GLOBE170.852009-12-01 09:08:001
10002RROBOT PENCIL SHARPNER85.172009-12-02 14:43:001
10080GROOVY CACTUS INFLATABLE170.392009-12-02 16:02:001
10109BENDY COLOUR PENCILS80.422009-12-03 12:31:001
10120DOGGY RUBBER170.212009-12-01 16:17:001
10123CHEARTS WRAPPING TAPE80.652009-12-01 14:28:001
stock_codetext · unique id
10002
descriptiontext
INFLATABLE POLITICAL GLOBE
category_idnumber · links to categories
17
list_pricedecimal
0.85
first_sold_atdate & time
2009-12-01 09:08:00
is_merchandisenumber
1
stock_codetext · unique id
10002R
descriptiontext
ROBOT PENCIL SHARPNER
category_idnumber · links to categories
8
list_pricedecimal
5.17
first_sold_atdate & time
2009-12-02 14:43:00
is_merchandisenumber
1
stock_codetext · unique id
10080
descriptiontext
GROOVY CACTUS INFLATABLE
category_idnumber · links to categories
17
list_pricedecimal
0.39
first_sold_atdate & time
2009-12-02 16:02:00
is_merchandisenumber
1
stock_codetext · unique id
10109
descriptiontext
BENDY COLOUR PENCILS
category_idnumber · links to categories
8
list_pricedecimal
0.42
first_sold_atdate & time
2009-12-03 12:31:00
is_merchandisenumber
1
stock_codetext · unique id
10120
descriptiontext
DOGGY RUBBER
category_idnumber · links to categories
17
list_pricedecimal
0.21
first_sold_atdate & time
2009-12-01 16:17:00
is_merchandisenumber
1
stock_codetext · unique id
10123C
descriptiontext
HEARTS WRAPPING TAPE
category_idnumber · links to categories
8
list_pricedecimal
0.65
first_sold_atdate & time
2009-12-01 14:28:00
is_merchandisenumber
1

first 6 of 5,304 rows · your queries use all of them

worked example

Run these steps in order to see the idea before you write your own query. The step marked “the pattern” is what the challenges ask for. Running the example does not count toward progress.

  1. Count orders versus line items. Run this. After joining items to orders, COUNT(*) is lines while COUNT(DISTINCT order_id) is invoices—use the distinct count when you mean orders.the pattern

    example.sql
    SELECT
      o.customer_id,
      COUNT(DISTINCT o.order_id) AS orders,
      COUNT(*) AS lines
    FROM orders o
    JOIN order_items i ON i.order_id = o.order_id
    WHERE o.customer_id IS NOT NULL AND o.order_type = 'sale'
    GROUP BY o.customer_id
    ORDER BY orders DESC
    LIMIT 10;
  2. Sum revenue per customer. Run this. quantity × unit_price rolled up by customer_id is the net sales number you will rank in the capstone tasks.

    step-2.sql
    SELECT
      o.customer_id,
      ROUND(SUM(i.quantity * i.unit_price), 2) AS net_sales
    FROM orders o
    JOIN order_items i ON i.order_id = o.order_id
    WHERE o.customer_id IS NOT NULL
    GROUP BY o.customer_id
    ORDER BY net_sales DESC
    LIMIT 10;

common mistake

Counting order lines instead of distinct orders inflates the order count for customers who buy many items per invoice.

challenge 1

For every identified customer, return customer_id, sale_orders (distinct sale orders), net_sales (quantity × unit_price over all their lines, rounded to 2 decimals) and sales_rank: DENSE_RANK by net_sales, highest first.

what to return

Columns
customer_idsale_ordersnet_salessales_rank in this order
Rows
any order
challenge-1.sql
 
To master this lesson, solve both challenges without hints and pass the concept check. 3 of 3 to go.
Capstone: customer insights — Advanced product analysis · Runtime