SQL Analysis and Tableau Vizualization of digital products
About the company: The company creates and sells
digital products on a designated marketplace. They have 14 products
in their portfolio. The marketplace withdraws fees for each sale.
Also, taxes are collected depending on the customer's country of
origin. So the author receives only a specific amount from the
product price. The marketplace doesn't provide in-depth sales
statistics.
Objective: To analyze sales and identify purchasing
trends among the customers.
Applied skills: Excel
SQL SQLite
Tableau
Stakeholder questions:
-
What were the total number of orders, revenue, profit, profit
margin, and return rate for 2023?
- Which countries have the most customers?
- Which products are the top sellers?
- Which products generate the most profit?
- What is the return rate for each product?
Answers
What were the total number of orders, revenue, profit, profit
margin, and return rate for 2023?
In 2023, the company processed 804 orders, generating total revenue of
$27,650.92. Net profit, after accounting for all fees, was $18,849.00,
representing 68.17% of total revenue. The return rate across all
products was 3.87%.
SQL query
SELECT COUNT (DISTINCT order_id) AS number_of_orders, round (sum (Price),2) AS revenue, round (sum (amount) ,2) AS profit, round (sum (amount) /sum(Price) * 100.0,2) || '%' AS profit_margin,
round (100.0 * COUNT (DISTINCT IIF(Type = 'Sale Refund' OR Type =
'Sale Reversal', order_id, NULL)) / NULLIF (COUNT (DISTINCT IIF (Type =
'Sale', order_id, NULL)), 0), 2) || '%' AS return_rate FROM crumina_statement_2023 WHERE type != 'Payout'
Which countries have the most customers?
Countries with the most customers orders by the highest profit rate:
- United States - 26.78%
- India - 8.97%
- United Kingdom - 5.86%
- Germany - 4.25%
- Canada - 4.25%
- France - 4.02%
SQL query
WITH profit_by_country AS (SELECT Other_Party_Country AS Country, round (sum (Amount),2) AS profit,
COUNT(iif(Type NOT IN ('Author Fee Refund', 'Sale Refund', 'Sale Reversal', 'Author Fee Reversal' ), Order_ID, NULL))/4 AS number_of_orders FROM crumina_statement_2023
WHERE Item_ID IS NOT null
GROUP BY Other_Party_Country
ORDER BY profit DESC)
SELECT country, profit, round(profit/ (SELECT sum (Amount) FROM crumina_statement_2023 WHERE Type != 'Payout') * 100, 2) || '%' AS profit_rate FROM profit_by_country
Which products are the top sellers?
Products that generated the most profit are:
- Olympus WordPress
- Seosight WordPress
- Polo WordPress
SQL Query
SELECT CASE
WHEN Item_ID = 16078535' THEN 'Polo WordPress'
WHEN Item_ID = 38048804' THEN 'Cryptoki React'
WHEN Item_ID = '34741893' THEN 'Cryptoki HTML'
WHEN Item_ID = '19245326' THEN 'Seosight WordPress'
WHEN Item_ID = '20418396' THEN 'Utouch HTML'
WHEN Item_ ID = 13850909' THEN 'Omni WordPress'
WHEN Item_ID = '22069917' THEN "WoOX HTML'
WHEN Item_ID = '17353995' THEN 'Seosight HTML'
WHEN Item_ID = '16964965' THEN 'Modesto WordPress'
WHEN Item_ID = '22788499' THEN 'Olympus WordPress'
WHEN Item_ID = '23231681' THEN 'Puzzler HTML'
WHEN Item_ID = '24765590' THEN 'HostSite HTML WHMCS'
WHEN Item_ID = '26148134' THEN 'TopTen HTML'
WHEN Item_ID = '20654547' THEN 'Utouch WordPress'
WHEN Item_ID = 18533327' THEN 'Osvald HTML'
WHEN Item_ID = '22832072' THEN 'Woox Crypto HTML'
WHEN Item_ID = 19755363' THEN 'Olympus HTML'
ELSE 'Not an Item'
END AS Item_Name,
round (sum (Amount),2) AS profit,
COUNT(iif (Type NOT IN ('Author Fee Refund', 'Sale Refund', 'Sale Reversal', 'Author Fee Reversal' ), Order_ID, NULL))/4 AS number_of_orders FROM crumina_statement_2023
ORDER BY profit DESC
WHERE Item_ID IS NOT null
GROUP BY Item_ID
Which products generate the most profit?
The most profit is generated by the next products:
- Olympus WordPress - $7,861.46 (41.71%)
- Seosight WordPress - $4,382.58 (23.25%)
- Polo WordPress - $1,918.67 (10.18%)
SQL Query
WITH
profit_by_product AS (SELECT CASE
WHEN Item_ID = 16078535' THEN 'Polo WordPress'
WHEN Item_ID = 38048804' THEN 'Cryptoki React'
WHEN Item_ID = '34741893' THEN 'Cryptoki HTML'
WHEN Item_ID = '19245326' THEN 'Seosight WordPress'
WHEN Item_ID = '20418396' THEN 'Utouch HTML'
WHEN Item_ ID = 13850909' THEN 'Omni WordPress'
WHEN Item_ID = '22069917' THEN "WoOX HTML'
WHEN Item_ID = '17353995' THEN 'Seosight HTML'
WHEN Item_ID = '16964965' THEN 'Modesto WordPress'
WHEN Item_ID = '22788499' THEN 'Olympus WordPress'
WHEN Item_ID = '23231681' THEN 'Puzzler HTML'
WHEN Item_ID = '24765590' THEN 'HostSite HTML WHMCS'
WHEN Item_ID = '26148134' THEN 'TopTen HTML'
WHEN Item_ID = '20654547' THEN 'Utouch WordPress'
WHEN Item_ID = 18533327' THEN 'Osvald HTML'
WHEN Item_ID = '22832072' THEN 'Woox Crypto HTML'
WHEN Item_ID = 19755363' THEN 'Olympus HTML'
ELSE 'Not an Item'
END AS Item_Name,
round (sum (Amount), 2) AS profit,
COUNT (iif (Type NOT IN ('Author Fee Refund', 'Sale Refund', Reversal', 'Author Fee Reversal' ), Order_ID, NULL))/4 AS number_of_orders FROM crumina_statement_2023
WHERE Item_ID IS NOT null
GROUP BY Item_ID ORDER BY profit DESC)
SELECT Item_Name, profit, round(profit/(SELECT sum (Amount) FROM crumina_statement_2023 WHERE Type != 'Payout') * 100, 2) || '%' AS profit_rate FROM profit_by_product
What is the return rate for each product?
The highest return rate is observed mostly among the HTML products.
The overall return rate looks as follows:
- Puzzler HTML - 20.00%
- Cryptoki HTML - 12.50%
- Seosight HTML - 8.97%
- Cryptoki React - 7.69%
- HostSite HTML - 6.67%
- Olympus WordPress - 5.68%
- TopTen HTML - 4.17%
- Olympus HTML - 4.05%
- Polo WordPress - 1.67%
- Seosight WordPress - 1.03%
SQL Query
WITH
profit_by_product AS (SELECT CASE
WHEN Item_ID = 16078535' THEN 'Polo WordPress'
WHEN Item_ID = 38048804' THEN 'Cryptoki React'
WHEN Item_ID = '34741893' THEN 'Cryptoki HTML'
WHEN Item_ID = '19245326' THEN 'Seosight WordPress'
WHEN Item_ID = '20418396' THEN 'Utouch HTML'
WHEN Item_ ID = 13850909' THEN 'Omni WordPress'
WHEN Item_ID = '22069917' THEN "WoOX HTML'
WHEN Item_ID = '17353995' THEN 'Seosight HTML'
WHEN Item_ID = '16964965' THEN 'Modesto WordPress'
WHEN Item_ID = '22788499' THEN 'Olympus WordPress'
WHEN Item_ID = '23231681' THEN 'Puzzler HTML'
WHEN Item_ID = '24765590' THEN 'HostSite HTML WHMCS'
WHEN Item_ID = '26148134' THEN 'TopTen HTML'
WHEN Item_ID = '20654547' THEN 'Utouch WordPress'
WHEN Item_ID = 18533327' THEN 'Osvald HTML'
WHEN Item_ID = '22832072' THEN 'Woox Crypto HTML'
WHEN Item_ID = 19755363' THEN 'Olympus HTML'
ELSE 'Not an Item'
END AS Item_Name,
round (100.0 * (COUNT(DISTINCT IIF(Type = 'Sale Refund' OR Type = 'Sale Reversal', order_id, NULL))) / NULLIF(COUNT (DISTINCT IIF(Type = 'Sale', order_id, NULL)), 0), 2) || '%' AS return_rate FROM crumina_statement_2023
WHERE Item_ID IS NOT NULL
GROUP BY Item_Name
ORDER BY CAST (return_rate AS REAL) DESC