Mekki MOURADI

Data Analyst

Rabat, Maroc

À Propos

Data Analyst Junior avec une solide expérience en marketing numérique et des compétences approfondies dans l’utilisation de Microsoft Excel, SQL, Tableau Software et Python.

Data Analysis with SQL : Inform a Business Decision

Liens

Compétences & Outils

Description du projet

  • L’entreprise a pour objectif d’augmenter ses ventes. Dans ce sens, le Responsable des Ventes prévoit offrir une incitation monétaire à ses employés.
  • Les employés responsables des 5 commandes les plus élevés recevront un bonus en fin d’année.

Objectifs de l'analyse

  • Déterminer les 5 commandes les plus élevées et les employés qui ont traité ces commandes afin de récompenser leurs efforts de ventes.

Étapes de l'analyse

Explorer la database 

Identifier les Tables à utiliser

  • EmployeeID (Employees)
  • OrderID (Orders)
  • Montant total de la commande :
    • Quantity (OrderDetails)
    • Price (Products)

Trouver le Nom et Prénom des différents employés ainsi que les OrderID respectifs

				
					SELECT lastname, firstname, orderid
FROM Employees
INNER JOIN Orders
ON employees.employeeid=orders.employeeid
ORDER BY lastname, firstname
				
			
LastNameFirstNameOrderID
BuchananSteven10248
BuchananSteven10254
BuchananSteven10269
BuchananSteven10297
BuchananSteven10320

Regrouper les données nécessaires sous un unique tableau

NB : On remarque que les résultats affichent plusieurs fois la même “OrderID”, il faudra donc penser à agréger le produit de la Quantity et Price pour toutes les lignes contenant la même OrderID ultérieurement pour avoir la Somme Total de la Commande.

				
					SELECT lastname, firstname, orders.orderid, products.productID, quantity, Price
FROM employees
INNER JOIN orders
ON employees.employeeid=orders.employeeid
INNER JOIN orderdetails
ON orders.orderid=orderdetails.orderid
INNER JOIN products
ON orderdetails.productid=products.productid
ORDER BY lastname, firstname
				
			
LastNameFirstNameOrderIDProductIDQuantityPrice
BuchananSteven10248111221
BuchananSteven10248421014
BuchananSteven1024872534.799999999999997
BuchananSteven1025424154.5
BuchananSteven10254552124

Les résultats démontrent que certains employés se retrouvent listés 2 fois dans le top 5 des plus grosses commandes (King Robert et Peacock Margaret).

				
					/* Ajout d'une colonne SalesAmount qui reflète le produit de la quantité et du prix
On additionne les différents SalesAmount des lignes comprenant la même orderid grâce à la fonction SUM()*/
SELECT lastname, firstname, orders.orderid, products.productID, quantity, Price, SUM(quantity*price) AS SalesAmount, employees.employeeid
FROM employees
INNER JOIN orders
ON employees.employeeid=orders.employeeid
INNER JOIN orderdetails
ON orders.orderid=orderdetails.orderid
INNER JOIN products
ON orderdetails.productid=products.productid
-- On regroupe par orderid pour agréger les différentes lignes avec la même orderid
GROUP BY orders.orderid
-- Trier les résultats par "SalesAmount" pour identifier les plus grosses commandes
ORDER BY SalesAmount desc
				
			
LastNameFirstNameOrderIDProductIDQuantityPriceSalesAmountEmployeeID
BuchananSteven1037220128115353.65
KingRobert1042435601814366.57
PeacockMargaret104173850263.5141044
KingRobert10353111221134277
PeacockMargaret10360283045.69244.254
DodsworthAnne10324162117.457698.459
PeacockMargaret10440245197246.014
PeacockMargaret1043017453972454
DavolioNancy103513820263.57103.59999999999041
PeacockMargaret1032919109.19999999999999936025.124

3 choix s’offrent donc à nous :

Définir le top 5 des ventes par Somme

				
					/* Ajout d'une colonne SalesAmount qui reflète le produit de la quantité et du prix
On additionne les différents SalesAmount des lignes comprenant la même orderid grâce à la fonction SUM()*/
WITH newtab1 AS (
SELECT lastname, firstname, orders.orderid, products.productID, quantity, Price, SUM(quantity*price) AS SalesAmount, employees.employeeid
FROM employees
INNER JOIN orders
ON employees.employeeid = orders.employeeid
INNER JOIN orderdetails
ON orders.orderid = orderdetails.orderid
INNER JOIN products
ON orderdetails.productid = products.productid
-- On regroupe par orderid pour agréger les différentes lignes avec la même orderid
GROUP BY orders.orderid
-- Trier les résultats par "SalesAmount" pour identifier les plus grosses commandes
ORDER BY SalesAmount desc
LIMIT(5)
)
SELECT lastname, firstname, SalesAmount
FROM newtab1
				
			
LastnameFirstnameSalesAmount
BuchananSteven15353.6
KingRobert14366.5
PeacockMargaret14104
KingRobert13427
PeacockMargaret9244.25

Définir le top 5 des employés distincts

				
					WITH ranking AS
(
SELECT
	lastname,
	firstname,
	SUM(price*quantity) AS sales_amount,
	ROW_NUMBER() OVER (PARTITION BY lastname ORDER BY SUM(price*quantity) DESC) AS row_num
FROM employees
INNER JOIN orders
ON employees.employeeid = orders.employeeid
INNER JOIN orderdetails
ON orders.orderid = orderdetails.orderid
INNER JOIN products
ON orderdetails.productid = products.productid

GROUP BY orders.orderid, lastname, firstname
)
SELECT lastname, firstname, sales_amount
FROM ranking
WHERE row_num=1
ORDER BY sales_amount DESC
LIMIT 5;
				
			
LastnameFirstnameSalesAmount
BuchananSteven15353.6
KingRobert14366.5
PeacockMargaret14104
DodsworthAnne7698.45
DavolioNancy7103.5999999999904

Déterminer la Somme Totale des ventes par employé

				
					/* Ajout d'une colonne SalesAmount qui reflète le produit de la quantité et du prix
On additionne les différents SalesAmount des lignes comprenant la même orderid grâce à la fonction SUM()*/
WITH newtab3 AS (
SELECT lastname, firstname, orders.orderid, products.productID, quantity, Price, SUM(quantity*price) AS TotalSales, employees.employeeid
FROM employees
INNER JOIN orders
ON employees.employeeid = orders.employeeid
INNER JOIN orderdetails
ON orders.orderid=orderdetails.orderid
INNER JOIN products
ON orderdetails.productid = products.productid
-- On regroupe par orderid pour agréger les différentes lignes avec la même orderid
GROUP BY employees.employeeid
-- Trier les résultats par "SalesAmount" pour identifier les plus grosses commandes
ORDER BY TotalSales desc
LIMIT(5)
)
SELECT lastname, firstname, TotalSales
FROM newtab3
				
			
LastnameFirstnameTotalSales
PeacockMargaret105696.499999999
DavolioNancy57690.389999999898
LeverlingJanet42838.35
KingRobert39772.300000000003
CallahanLaura39309.379999999997

Conclusion de l'analyse

Cette analyse permet au Responsable des Ventes de choisir l’un des trois scénarios présentés ci-dessous :

Récompenser les employés responsables du top 5 des ventes par Somme :

  • Buchanan Steven
  • King Robert
  • Peacock Margaret

Récompenser les 5 meilleurs employés distincts vis à vis des Commandes les plus élevées :

  • Buchanan Steven
  • King Robert
  • Peacock Margaret
  • Dodsworth Anne
  • Davolio Nancy

Récompenser les 5 meilleurs employés distincts vis à vis de la Somme Totale des commandes par employé

  • Peacock Margaret
  • Davolio Nancy
  • Leverling Janet
  • King Robert
  • Callahan Laura