Last active
November 19, 2021 17:25
-
-
Save JerryNixon/d7052ef53feef964812bc83c206f107b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"kernelspec": { | |
"name": "SQL", | |
"display_name": "SQL", | |
"language": "sql" | |
}, | |
"language_info": { | |
"name": "sql", | |
"version": "" | |
} | |
}, | |
"nbformat_minor": 2, | |
"nbformat": 4, | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"source": [ | |
"SET NOCOUNT ON" | |
], | |
"metadata": { | |
"azdata_cell_guid": "36f4777d-f392-4ec1-a82d-1887fd892ff7", | |
"tags": [ | |
"hide_input" | |
] | |
}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Commands completed successfully." | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Total execution time: 00:00:00" | |
}, | |
"metadata": {} | |
} | |
], | |
"execution_count": 96 | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Create Relational Tables\n", | |
"\n", | |
"" | |
], | |
"metadata": { | |
"azdata_cell_guid": "2c2f85e2-9ceb-4520-9e2f-98aaab24337b" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"DROP TABLE IF EXISTS Recommendations;\r\n", | |
"DROP TABLE IF EXISTS LineItems;\r\n", | |
"DROP TABLE IF EXISTS Invoices;\r\n", | |
"DROP TABLE IF EXISTS Customers;\r\n", | |
"DROP TABLE IF EXISTS Demographics;\r\n", | |
"DROP TABLE IF EXISTS Products;\r\n", | |
"\r\n", | |
"GO\r\n", | |
"\r\n", | |
"CREATE TABLE Customers\r\n", | |
"(\r\n", | |
" Id INT PRIMARY KEY\r\n", | |
" , Name VARCHAR(50) NOT NULL\r\n", | |
" , DemographicId INT DEFAULT 1\r\n", | |
");\r\n", | |
"\r\n", | |
"CREATE TABLE Demographics\r\n", | |
"(\r\n", | |
" Id INT PRIMARY KEY\r\n", | |
" , Name VARCHAR(50)\r\n", | |
");\r\n", | |
"\r\n", | |
"CREATE TABLE Products\r\n", | |
"(\r\n", | |
" Id INT PRIMARY KEY\r\n", | |
" , Name VARCHAR(50)\r\n", | |
" , Cost MONEY NOT NULL\r\n", | |
");\r\n", | |
"\r\n", | |
"CREATE TABLE Recommendations\r\n", | |
"(\r\n", | |
" ProductId INT\r\n", | |
" , RecommendationId INT\r\n", | |
" , DemographicId INT\r\n", | |
");\r\n", | |
"\r\n", | |
"CREATE TABLE Invoices\r\n", | |
"(\r\n", | |
" Id INT PRIMARY KEY\r\n", | |
" , CustomerId INT\r\n", | |
" , Date DATETIME\r\n", | |
" , Total MONEY\r\n", | |
");\r\n", | |
"\r\n", | |
"CREATE TABLE LineItems\r\n", | |
"(\r\n", | |
" InvoiceId INT \r\n", | |
" , ProductId INT\r\n", | |
" , Cost MONEY \r\n", | |
");" | |
], | |
"metadata": { | |
"azdata_cell_guid": "0d9e0ca0-40c0-42f2-809d-60c8be830b95", | |
"tags": [ | |
"hide_input" | |
] | |
}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Commands completed successfully." | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Commands completed successfully." | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Total execution time: 00:00:00.010" | |
}, | |
"metadata": {} | |
} | |
], | |
"execution_count": 97 | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Add Relational FK Constraints" | |
], | |
"metadata": { | |
"azdata_cell_guid": "a5b936de-ff13-4456-b2d0-ca8368681bd8" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"IF (OBJECT_ID('dbo.FK_Customers_Demographics', 'F') IS NOT NULL)\r\n", | |
" ALTER TABLE dbo.Customers DROP CONSTRAINT FK_Customers_Demographics \r\n", | |
"IF (OBJECT_ID('dbo.FK_Invoices_Customers', 'F') IS NOT NULL)\r\n", | |
" ALTER TABLE dbo.Invoices DROP CONSTRAINT FK_Invoices_Customers \r\n", | |
"IF (OBJECT_ID('dbo.FK_LineItems_Invoices', 'F') IS NOT NULL)\r\n", | |
" ALTER TABLE dbo.LineItems DROP CONSTRAINT\tFK_LineItems_Invoices \r\n", | |
"IF (OBJECT_ID('dbo.FK_LineItems_Products', 'F') IS NOT NULL)\r\n", | |
" ALTER TABLE dbo.LineItems DROP CONSTRAINT\tFK_LineItems_Products \r\n", | |
"IF (OBJECT_ID('dbo.FK_Recommendations_Demographics', 'F') IS NOT NULL)\r\n", | |
" ALTER TABLE dbo.Recommendations DROP CONSTRAINT\tFK_Recommendations_Demographics \r\n", | |
"IF (OBJECT_ID('dbo.FK_Recommendations_Products', 'F') IS NOT NULL)\r\n", | |
" ALTER TABLE dbo.Recommendations DROP CONSTRAINT\tFK_Recommendations_Products \r\n", | |
"IF (OBJECT_ID('dbo.FK_Recommendations_Products1', 'F') IS NOT NULL)\r\n", | |
" ALTER TABLE dbo.Recommendations DROP CONSTRAINT\tFK_Recommendations_Products1 \r\n", | |
"\r\n", | |
"GO\r\n", | |
"\r\n", | |
"ALTER TABLE dbo.Customers ADD CONSTRAINT\r\n", | |
"\tFK_Customers_Demographics \r\n", | |
"\tFOREIGN KEY ( DemographicId ) \r\n", | |
"\tREFERENCES dbo.Demographics (Id) \r\n", | |
"\tON UPDATE NO ACTION \r\n", | |
"\tON DELETE NO ACTION \r\n", | |
"\t\r\n", | |
"ALTER TABLE dbo.Invoices ADD CONSTRAINT\r\n", | |
"\tFK_Invoices_Customers \r\n", | |
"\tFOREIGN KEY (CustomerId) \r\n", | |
"\tREFERENCES dbo.Customers (Id) \r\n", | |
"\tON UPDATE NO ACTION \r\n", | |
"\tON DELETE NO ACTION \r\n", | |
"\t\r\n", | |
"ALTER TABLE dbo.LineItems ADD CONSTRAINT\r\n", | |
"\tFK_LineItems_Invoices \r\n", | |
"\tFOREIGN KEY (InvoiceId) \r\n", | |
"\tREFERENCES dbo.Invoices (Id) \r\n", | |
"\tON UPDATE NO ACTION \r\n", | |
"\tON DELETE NO ACTION \r\n", | |
"\r\n", | |
"ALTER TABLE dbo.LineItems ADD CONSTRAINT\r\n", | |
"\tFK_LineItems_Products \r\n", | |
"\tFOREIGN KEY (ProductId) \r\n", | |
"\tREFERENCES dbo.Products (Id) \r\n", | |
"\tON UPDATE NO ACTION \r\n", | |
"\tON DELETE NO ACTION \r\n", | |
"\r\n", | |
"ALTER TABLE dbo.Recommendations ADD CONSTRAINT\r\n", | |
"\tFK_Recommendations_Demographics \r\n", | |
"\tFOREIGN KEY (DemographicId) \r\n", | |
"\tREFERENCES dbo.Demographics (Id) \r\n", | |
"\tON UPDATE NO ACTION \r\n", | |
"\tON DELETE NO ACTION \r\n", | |
"\r\n", | |
"ALTER TABLE dbo.Recommendations ADD CONSTRAINT\r\n", | |
"\tFK_Recommendations_Products \r\n", | |
"\tFOREIGN KEY (ProductId) \r\n", | |
"\tREFERENCES dbo.Products (Id) \r\n", | |
"\tON UPDATE NO ACTION \r\n", | |
"\tON DELETE NO ACTION \r\n", | |
"\t\r\n", | |
"ALTER TABLE dbo.Recommendations ADD CONSTRAINT\r\n", | |
"\tFK_Recommendations_Products1 \r\n", | |
"\tFOREIGN KEY (RecommendationId) \r\n", | |
"\tREFERENCES dbo.Products\t(Id) \r\n", | |
"\tON UPDATE NO ACTION \r\n", | |
"\tON DELETE NO ACTION " | |
], | |
"metadata": { | |
"azdata_cell_guid": "94109bf5-13f7-43fd-940b-b74260067cb3", | |
"tags": [ | |
"hide_input" | |
] | |
}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Commands completed successfully." | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Commands completed successfully." | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Total execution time: 00:00:00.005" | |
}, | |
"metadata": {} | |
} | |
], | |
"execution_count": 98 | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Fill Relational Tables\n", | |
"\n", | |
"Fill the relational tables with random data.\n", | |
"\n", | |
"- There are 5 Demographics\n", | |
"- There are 10 Products, Cost is random\n", | |
"- There are 150 Customer\n", | |
"- Every Customer has an Invoice\n", | |
"- Every Invoice has one (or two) Line Items (it's random), Price is random" | |
], | |
"metadata": { | |
"azdata_cell_guid": "1cac82a8-37fa-4933-b2ed-c27e16b8d1af" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"DELETE FROM Recommendations;\r\n", | |
"DELETE FROM LineItems;\r\n", | |
"DELETE FROM Invoices;\r\n", | |
"DELETE FROM Customers;\r\n", | |
"DELETE FROM Demographics;\r\n", | |
"DELETE FROM Products;\r\n", | |
"\r\n", | |
"GO\r\n", | |
"\r\n", | |
"-- Demographics\r\n", | |
"\r\n", | |
"WITH generator (Id, Name) AS\r\n", | |
"(\r\n", | |
" SELECT 1, CONCAT('DEMO-', NEWID())\r\n", | |
" UNION ALL\r\n", | |
" SELECT ID + 1, CONCAT('DEMO-', NEWID())\r\n", | |
" FROM generator \r\n", | |
" WHERE ID < 5\r\n", | |
")\r\n", | |
"INSERT INTO Demographics (Id, Name)\r\n", | |
"SELECT Id, Name FROM generator\r\n", | |
"OPTION (MAXRECURSION 0);\r\n", | |
"\r\n", | |
"-- Customers\r\n", | |
"\r\n", | |
"WITH generator (Id, Name) AS\r\n", | |
"(\r\n", | |
" SELECT 1, CONCAT('CUST-', NEWID())\r\n", | |
" UNION ALL\r\n", | |
" SELECT ID + 1, CONCAT('CUST-', NEWID())\r\n", | |
" FROM generator \r\n", | |
" WHERE ID < 150\r\n", | |
")\r\n", | |
"INSERT INTO Customers (Id, Name, DemographicId)\r\n", | |
"SELECT Id, Name, CAST(RAND(Id * 1234) * 5 AS INT) + 1 FROM generator\r\n", | |
"OPTION (MAXRECURSION 0);\r\n", | |
"\r\n", | |
"-- Products\r\n", | |
"\r\n", | |
"WITH generator (Id, Name) AS\r\n", | |
"(\r\n", | |
" SELECT 1, CONCAT('PROD-', NEWID())\r\n", | |
" UNION ALL\r\n", | |
" SELECT ID + 1, CONCAT('PROD-', NEWID()) \r\n", | |
" FROM generator \r\n", | |
" WHERE ID < 10\r\n", | |
")\r\n", | |
"INSERT INTO Products (Id, Name, Cost)\r\n", | |
"SELECT Id, Name, CAST(RAND(Id * 1234) * 5 AS INT) + 1 FROM generator\r\n", | |
"OPTION (MAXRECURSION 0);\r\n", | |
"\r\n", | |
"-- Recommendations\r\n", | |
"\r\n", | |
"DECLARE @products INT = (SELECT MAX(Id) FROM Products);\r\n", | |
"\r\n", | |
"WITH generator (Id, RecId, DemId) AS\r\n", | |
"(\r\n", | |
" SELECT 1, CAST(RAND() * @products AS INT) + 1, CAST(RAND() * 5 AS INT) + 1\r\n", | |
" UNION ALL\r\n", | |
" SELECT ID + 1, CAST(RAND(ID * 1234) * @products AS INT) + 1, CAST(RAND(ID * 2345) * 5 AS INT) + 1\r\n", | |
" FROM generator \r\n", | |
" WHERE ID < @products\r\n", | |
")\r\n", | |
"INSERT INTO Recommendations (ProductId, RecommendationId, DemographicId)\r\n", | |
"SELECT Id, RecId, DemId FROM generator\r\n", | |
"OPTION (MAXRECURSION 0);\r\n", | |
"\r\n", | |
"-- Invoices\r\n", | |
"\r\n", | |
"DECLARE @customers INT = (SELECT MAX(Id) FROM Customers);\r\n", | |
"\r\n", | |
"WITH generator (Id, CustomerId) AS\r\n", | |
"(\r\n", | |
" SELECT 1, 1\r\n", | |
" UNION ALL\r\n", | |
" SELECT ID + 1, ID + 1\r\n", | |
" FROM generator \r\n", | |
" WHERE ID < @customers\r\n", | |
")\r\n", | |
"INSERT INTO Invoices (Id, Date, CustomerId, Total)\r\n", | |
"SELECT Id, GETDATE(), CustomerId, 1.0 FROM generator\r\n", | |
"OPTION (MAXRECURSION 0);\r\n", | |
"\r\n", | |
"-- LineItems\r\n", | |
"\r\n", | |
"WITH generator (InvoiceId) AS\r\n", | |
"(\r\n", | |
" SELECT 1\r\n", | |
" UNION ALL\r\n", | |
" SELECT InvoiceId + 1\r\n", | |
" FROM generator \r\n", | |
" WHERE InvoiceId < @customers\r\n", | |
")\r\n", | |
"INSERT INTO LineItems (InvoiceId, ProductId, Cost)\r\n", | |
"SELECT InvoiceId, CAST(RAND(InvoiceId * 1234) * @products AS INT) + 1, CAST(RAND(InvoiceId * 5432) * 10 AS INT) + 10 FROM generator\r\n", | |
"UNION \r\n", | |
"SELECT InvoiceId, CAST(RAND(InvoiceId * 4321) * @products AS INT) + 1, CAST(RAND(InvoiceId * 2345) * 10 AS INT) + 10 FROM generator\r\n", | |
"OPTION (MAXRECURSION 0);\r\n", | |
"" | |
], | |
"metadata": { | |
"azdata_cell_guid": "913f24ae-d406-4abe-8514-46c233dac614", | |
"tags": [] | |
}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Commands completed successfully." | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Commands completed successfully." | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Total execution time: 00:00:00.022" | |
}, | |
"metadata": {} | |
} | |
], | |
"execution_count": 99 | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Query Relational Tables" | |
], | |
"metadata": { | |
"azdata_cell_guid": "b0b1a74e-0a2a-4a9b-8ad8-ff9bc667dcb3" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"-- table counts\r\n", | |
"\r\n", | |
"SELECT\r\n", | |
" (SELECT COUNT(*) FROM Customers) AS Customers\r\n", | |
", (SELECT COUNT(*) FROM Invoices) AS Invoices \r\n", | |
", (SELECT COUNT(*) FROM LineItems) AS LineItems \r\n", | |
", (SELECT COUNT(*) FROM Demographics) AS Demographics\r\n", | |
", (SELECT COUNT(*) FROM Products) AS Products\r\n", | |
", (SELECT COUNT(*) FROM Recommendations) AS Recommendations \r\n", | |
"\r\n", | |
"-- demographic distribution\r\n", | |
"\r\n", | |
"SELECT\r\n", | |
" Demographics.Name as Demographic\r\n", | |
" , COUNT(Customers.Id) AS Customers\r\n", | |
"FROM Customers\r\n", | |
"JOIN Demographics\r\n", | |
" ON Customers.DemographicId = Demographics.Id\r\n", | |
"GROUP BY\r\n", | |
" Demographics.Name\r\n", | |
"\r\n", | |
" -- profit report\r\n", | |
"\r\n", | |
"SELECT\r\n", | |
" Products.Name as Product\r\n", | |
" , COUNT(DISTINCT LineItems.InvoiceId) AS Sales\r\n", | |
" , MAX(Products.Cost) AS Item\r\n", | |
" , AVG(LineItems.Cost) AS Price\r\n", | |
" , SUM(Products.Cost) AS Cost\r\n", | |
" , SUM(LineItems.Cost) AS Revenue\r\n", | |
" , SUM(LineItems.Cost) - SUM(Products.Cost) AS Profit\r\n", | |
"FROM LineItems\r\n", | |
"JOIN Products\r\n", | |
" ON LineItems.ProductId = Products.Id\r\n", | |
"GROUP BY\r\n", | |
" Products.Name" | |
], | |
"metadata": { | |
"azdata_cell_guid": "f6308ef8-4264-4887-8a59-cbca64b0816b", | |
"tags": [] | |
}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Commands completed successfully." | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Total execution time: 00:00:00.031" | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "execute_result", | |
"metadata": {}, | |
"execution_count": 100, | |
"data": { | |
"application/vnd.dataresource+json": { | |
"schema": { | |
"fields": [ | |
{ | |
"name": "Customers" | |
}, | |
{ | |
"name": "Invoices" | |
}, | |
{ | |
"name": "LineItems" | |
}, | |
{ | |
"name": "Demographics" | |
}, | |
{ | |
"name": "Products" | |
}, | |
{ | |
"name": "Recommendations" | |
} | |
] | |
}, | |
"data": [ | |
{ | |
"0": "150", | |
"1": "150", | |
"2": "288", | |
"3": "5", | |
"4": "10", | |
"5": "10" | |
} | |
] | |
}, | |
"text/html": [ | |
"<table>", | |
"<tr><th>Customers</th><th>Invoices</th><th>LineItems</th><th>Demographics</th><th>Products</th><th>Recommendations</th></tr>", | |
"<tr><td>150</td><td>150</td><td>288</td><td>5</td><td>10</td><td>10</td></tr>", | |
"</table>" | |
] | |
} | |
}, { | |
"output_type": "execute_result", | |
"metadata": {}, | |
"execution_count": 100, | |
"data": { | |
"application/vnd.dataresource+json": { | |
"schema": { | |
"fields": [ | |
{ | |
"name": "Demographic" | |
}, | |
{ | |
"name": "Customers" | |
} | |
] | |
}, | |
"data": [ | |
{ | |
"0": "DEMO-00A8D9D6-0ECD-4C21-94F6-1997A3850216", | |
"1": "34" | |
}, | |
{ | |
"0": "DEMO-5B9FB05E-50AD-4F83-B19E-40421C2066F6", | |
"1": "25" | |
}, | |
{ | |
"0": "DEMO-893C75B3-3656-4D29-AACA-4F122B807AAE", | |
"1": "27" | |
}, | |
{ | |
"0": "DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08", | |
"1": "29" | |
}, | |
{ | |
"0": "DEMO-D81AF279-EB67-4878-86AC-9DBD85A88B22", | |
"1": "35" | |
} | |
] | |
}, | |
"text/html": [ | |
"<table>", | |
"<tr><th>Demographic</th><th>Customers</th></tr>", | |
"<tr><td>DEMO-00A8D9D6-0ECD-4C21-94F6-1997A3850216</td><td>34</td></tr>", | |
"<tr><td>DEMO-5B9FB05E-50AD-4F83-B19E-40421C2066F6</td><td>25</td></tr>", | |
"<tr><td>DEMO-893C75B3-3656-4D29-AACA-4F122B807AAE</td><td>27</td></tr>", | |
"<tr><td>DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08</td><td>29</td></tr>", | |
"<tr><td>DEMO-D81AF279-EB67-4878-86AC-9DBD85A88B22</td><td>35</td></tr>", | |
"</table>" | |
] | |
} | |
}, { | |
"output_type": "execute_result", | |
"metadata": {}, | |
"execution_count": 100, | |
"data": { | |
"application/vnd.dataresource+json": { | |
"schema": { | |
"fields": [ | |
{ | |
"name": "Product" | |
}, | |
{ | |
"name": "Sales" | |
}, | |
{ | |
"name": "Item" | |
}, | |
{ | |
"name": "Price" | |
}, | |
{ | |
"name": "Cost" | |
}, | |
{ | |
"name": "Revenue" | |
}, | |
{ | |
"name": "Profit" | |
} | |
] | |
}, | |
"data": [ | |
{ | |
"0": "PROD-0E3DC5AC-8EED-4E9D-BF7B-49EB77E5D4DE", | |
"1": "27", | |
"2": "5.0000", | |
"3": "13.5185", | |
"4": "135.0000", | |
"5": "365.0000", | |
"6": "230.0000" | |
}, | |
{ | |
"0": "PROD-3C36696E-64EA-4629-A807-E3B4A6B0A369", | |
"1": "26", | |
"2": "5.0000", | |
"3": "14.5000", | |
"4": "130.0000", | |
"5": "377.0000", | |
"6": "247.0000" | |
}, | |
{ | |
"0": "PROD-56A84B7D-7F1D-4779-AFB2-DC741E59C25D", | |
"1": "27", | |
"2": "5.0000", | |
"3": "14.8571", | |
"4": "140.0000", | |
"5": "416.0000", | |
"6": "276.0000" | |
}, | |
{ | |
"0": "PROD-6E8449E5-6EBA-4D31-B782-FD6C15DAD1BD", | |
"1": "27", | |
"2": "4.0000", | |
"3": "14.4444", | |
"4": "108.0000", | |
"5": "390.0000", | |
"6": "282.0000" | |
}, | |
{ | |
"0": "PROD-889EE0C7-F685-450C-9AD0-87F583A16D32", | |
"1": "29", | |
"2": "4.0000", | |
"3": "15.3103", | |
"4": "116.0000", | |
"5": "444.0000", | |
"6": "328.0000" | |
}, | |
{ | |
"0": "PROD-9E174C2D-CAF7-475E-9649-43DC33E899F8", | |
"1": "27", | |
"2": "5.0000", | |
"3": "14.9629", | |
"4": "135.0000", | |
"5": "404.0000", | |
"6": "269.0000" | |
}, | |
{ | |
"0": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C", | |
"1": "30", | |
"2": "5.0000", | |
"3": "14.3750", | |
"4": "160.0000", | |
"5": "460.0000", | |
"6": "300.0000" | |
}, | |
{ | |
"0": "PROD-D57DEB0D-5E8F-4035-972C-F247E302B03B", | |
"1": "26", | |
"2": "5.0000", | |
"3": "14.5384", | |
"4": "130.0000", | |
"5": "378.0000", | |
"6": "248.0000" | |
}, | |
{ | |
"0": "PROD-D8453D25-1800-41A4-80E4-165C30027CEB", | |
"1": "30", | |
"2": "5.0000", | |
"3": "14.5937", | |
"4": "160.0000", | |
"5": "467.0000", | |
"6": "307.0000" | |
}, | |
{ | |
"0": "PROD-E9541A39-D51D-4635-A7B7-76378888D03A", | |
"1": "32", | |
"2": "4.0000", | |
"3": "14.0000", | |
"4": "136.0000", | |
"5": "476.0000", | |
"6": "340.0000" | |
} | |
] | |
}, | |
"text/html": [ | |
"<table>", | |
"<tr><th>Product</th><th>Sales</th><th>Item</th><th>Price</th><th>Cost</th><th>Revenue</th><th>Profit</th></tr>", | |
"<tr><td>PROD-0E3DC5AC-8EED-4E9D-BF7B-49EB77E5D4DE</td><td>27</td><td>5.0000</td><td>13.5185</td><td>135.0000</td><td>365.0000</td><td>230.0000</td></tr>", | |
"<tr><td>PROD-3C36696E-64EA-4629-A807-E3B4A6B0A369</td><td>26</td><td>5.0000</td><td>14.5000</td><td>130.0000</td><td>377.0000</td><td>247.0000</td></tr>", | |
"<tr><td>PROD-56A84B7D-7F1D-4779-AFB2-DC741E59C25D</td><td>27</td><td>5.0000</td><td>14.8571</td><td>140.0000</td><td>416.0000</td><td>276.0000</td></tr>", | |
"<tr><td>PROD-6E8449E5-6EBA-4D31-B782-FD6C15DAD1BD</td><td>27</td><td>4.0000</td><td>14.4444</td><td>108.0000</td><td>390.0000</td><td>282.0000</td></tr>", | |
"<tr><td>PROD-889EE0C7-F685-450C-9AD0-87F583A16D32</td><td>29</td><td>4.0000</td><td>15.3103</td><td>116.0000</td><td>444.0000</td><td>328.0000</td></tr>", | |
"<tr><td>PROD-9E174C2D-CAF7-475E-9649-43DC33E899F8</td><td>27</td><td>5.0000</td><td>14.9629</td><td>135.0000</td><td>404.0000</td><td>269.0000</td></tr>", | |
"<tr><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>30</td><td>5.0000</td><td>14.3750</td><td>160.0000</td><td>460.0000</td><td>300.0000</td></tr>", | |
"<tr><td>PROD-D57DEB0D-5E8F-4035-972C-F247E302B03B</td><td>26</td><td>5.0000</td><td>14.5384</td><td>130.0000</td><td>378.0000</td><td>248.0000</td></tr>", | |
"<tr><td>PROD-D8453D25-1800-41A4-80E4-165C30027CEB</td><td>30</td><td>5.0000</td><td>14.5937</td><td>160.0000</td><td>467.0000</td><td>307.0000</td></tr>", | |
"<tr><td>PROD-E9541A39-D51D-4635-A7B7-76378888D03A</td><td>32</td><td>4.0000</td><td>14.0000</td><td>136.0000</td><td>476.0000</td><td>340.0000</td></tr>", | |
"</table>" | |
] | |
} | |
} | |
], | |
"execution_count": 100 | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Create Graph Tables\n", | |
"\n", | |
"" | |
], | |
"metadata": { | |
"azdata_cell_guid": "e3537bab-a6b7-400c-9841-02762016b9f4" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"-- delete edges\r\n", | |
"\r\n", | |
"DROP TABLE IF EXISTS purchased;\r\n", | |
"DROP TABLE IF EXISTS is_in;\r\n", | |
"DROP TABLE IF EXISTS recommends;\r\n", | |
"\r\n", | |
"-- delete nodes\r\n", | |
"\r\n", | |
"DROP TABLE IF EXISTS Customer;\r\n", | |
"DROP TABLE IF EXISTS Product;\r\n", | |
"DROP TABLE IF EXISTS Demographic;\r\n", | |
"\r\n", | |
"-- create nodes\r\n", | |
"\r\n", | |
"CREATE TABLE Customer\r\n", | |
"(\r\n", | |
" Id INT PRIMARY KEY\r\n", | |
" , Name VARCHAR(50)\r\n", | |
") AS NODE;\r\n", | |
"\r\n", | |
"CREATE TABLE Demographic\r\n", | |
"(\r\n", | |
" Id INT PRIMARY KEY\r\n", | |
" , Name VARCHAR(50)\r\n", | |
") AS NODE;\r\n", | |
"\r\n", | |
"CREATE TABLE Product\r\n", | |
"(\r\n", | |
" Id INT PRIMARY KEY\r\n", | |
" , Name VARCHAR(50)\r\n", | |
" , Cost MONEY\r\n", | |
") AS NODE;\r\n", | |
"\r\n", | |
"-- create edges\r\n", | |
"\r\n", | |
"CREATE TABLE is_in\r\n", | |
"(\r\n", | |
" CONSTRAINT EC_IS_IN\r\n", | |
" CONNECTION (Customer TO Demographic) \r\n", | |
" ON DELETE CASCADE\r\n", | |
") AS EDGE;\r\n", | |
"\r\n", | |
"CREATE TABLE purchased\r\n", | |
"(\r\n", | |
" Date DATETIME\r\n", | |
" , Cost MONEY\r\n", | |
" CONSTRAINT EC_PURCHASED\r\n", | |
" CONNECTION (Customer TO Product) \r\n", | |
" ON DELETE CASCADE\r\n", | |
") AS EDGE;\r\n", | |
"\r\n", | |
"CREATE TABLE recommends\r\n", | |
"(\r\n", | |
" DemographicId INT\r\n", | |
" CONSTRAINT EC_RECOMMENDS\r\n", | |
" CONNECTION (Product TO Product) \r\n", | |
" ON DELETE CASCADE\r\n", | |
") AS EDGE;\r\n", | |
"" | |
], | |
"metadata": { | |
"azdata_cell_guid": "7fe86d69-3a42-4de0-8478-d90df0320401", | |
"tags": [ | |
"hide_input" | |
] | |
}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Commands completed successfully." | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Total execution time: 00:00:00.014" | |
}, | |
"metadata": {} | |
} | |
], | |
"execution_count": 101 | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Fill Graph Nodes" | |
], | |
"metadata": { | |
"azdata_cell_guid": "dcb6e557-7bd8-4597-97a3-059ac12186b8" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"DELETE FROM Customer;\r\n", | |
"DELETE FROM Demographic;\r\n", | |
"DELETE FROM Product;\r\n", | |
"\r\n", | |
"DELETE FROM is_in;\r\n", | |
"DELETE FROM purchased;\r\n", | |
"DELETE FROM recommends;\r\n", | |
"\r\n", | |
"GO\r\n", | |
"\r\n", | |
"-- fill nodes\r\n", | |
"\r\n", | |
"INSERT INTO Customer (Id, Name)\r\n", | |
"SELECT Id, Name FROM Customers;\r\n", | |
"\r\n", | |
"INSERT INTO Demographic (Id, Name)\r\n", | |
"SELECT Id, Name FROM Demographics;\r\n", | |
"\r\n", | |
"INSERT INTO Product (Id, Name, Cost)\r\n", | |
"SELECT Id, Name, Cost FROM Products;\r\n", | |
"\r\n", | |
"-- fill edges\r\n", | |
"\r\n", | |
"INSERT INTO is_in ($from_id, $to_id)\r\n", | |
"SELECT\r\n", | |
" Customer.$node_id\r\n", | |
" , Demographic.$node_id\r\n", | |
"FROM Customer\r\n", | |
"JOIN Customers\r\n", | |
" ON Customer.Id = Customers.Id\r\n", | |
"JOIN Demographic\r\n", | |
" ON Customers.DemographicId = Demographic.Id\r\n", | |
"\r\n", | |
"INSERT INTO purchased ($from_id, $to_id, Date, Cost)\r\n", | |
"SELECT DISTINCT\r\n", | |
" Customer.$node_id\r\n", | |
" , Product.$node_id\r\n", | |
" , Invoices.Date\r\n", | |
" , LineItems.Cost\r\n", | |
"FROM Customer\r\n", | |
"JOIN Invoices\r\n", | |
" ON Customer.Id = Invoices.CustomerId\r\n", | |
"JOIN LineItems\r\n", | |
" ON Invoices.Id = LineItems.InvoiceId\r\n", | |
"JOIN Products\r\n", | |
" ON LineItems.ProductId = Products.Id\r\n", | |
"JOIN Product\r\n", | |
" ON Products.Id = Product.Id\r\n", | |
"\r\n", | |
"INSERT INTO recommends ($from_id, $to_id, DemographicId)\r\n", | |
"SELECT\r\n", | |
" Product.$node_id\r\n", | |
" , Product2.$node_id\r\n", | |
" , Recommendations.DemographicId\r\n", | |
"FROM Product\r\n", | |
"JOIN Recommendations\r\n", | |
" ON Product.Id = Recommendations.ProductId\r\n", | |
"JOIN Product as Product2\r\n", | |
" ON Recommendations.RecommendationId = Product2.Id" | |
], | |
"metadata": { | |
"azdata_cell_guid": "e70baea3-8241-454e-80cc-ceb4b883a352", | |
"tags": [ | |
"hide_input" | |
] | |
}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Commands completed successfully." | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Commands completed successfully." | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Total execution time: 00:00:00.044" | |
}, | |
"metadata": {} | |
} | |
], | |
"execution_count": 102 | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Query the graph" | |
], | |
"metadata": { | |
"azdata_cell_guid": "899a2360-58a5-45ee-899b-01bb7c0c2a8b" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"-- counts of tables\r\n", | |
"\r\n", | |
"SELECT\r\n", | |
" (SELECT COUNT(*) FROM Customer) AS Customer\r\n", | |
", (SELECT COUNT(*) FROM Demographic) AS Demographic \r\n", | |
", (SELECT COUNT(*) FROM Product) AS Product \r\n", | |
", (SELECT COUNT(*) FROM is_in) AS is_in\r\n", | |
", (SELECT COUNT(*) FROM purchased) AS purchased\r\n", | |
", (SELECT COUNT(*) FROM recommends) AS recommends \r\n", | |
"\r\n", | |
"-- top file customers & their demographic\r\n", | |
"\r\n", | |
"SELECT TOP 5\r\n", | |
" c.Name as Customer\r\n", | |
" , d.Name as Demographic\r\n", | |
"FROM Customer AS c, is_in, Demographic AS d\r\n", | |
"WHERE MATCH(c-(is_in)->d)\r\n", | |
"\r\n", | |
"-- top 5 customer purchases\r\n", | |
"\r\n", | |
"SELECT TOP 5\r\n", | |
" c.Name as Customer\r\n", | |
" , p.Name as Product\r\n", | |
" , purchased.Date\r\n", | |
" , purchased.Cost\r\n", | |
"FROM Customer AS c, purchased, Product AS p\r\n", | |
"WHERE MATCH(c-(purchased)->p)\r\n", | |
"ORDER BY purchased.Date DESC\r\n", | |
"\r\n", | |
"-- top 5 product recommendations\r\n", | |
"\r\n", | |
"SELECT TOP 5\r\n", | |
" p1.Name as Product\r\n", | |
" , p2.Name as Recommendation\r\n", | |
" , recommends.DemographicId\r\n", | |
"FROM Product AS p1, recommends, Product AS p2\r\n", | |
"WHERE MATCH(p1-(recommends)->p2)\r\n", | |
"\r\n", | |
"-- profit report\r\n", | |
"\r\n", | |
"SELECT\r\n", | |
" Product.Name as Product\r\n", | |
" , COUNT(purchased.Date) AS Sales\r\n", | |
" , MAX(Product.Cost) AS Item\r\n", | |
" , AVG(purchased.Cost) AS Price\r\n", | |
" , SUM(Product.Cost) AS Cost\r\n", | |
" , SUM(purchased.Cost) AS Revenue\r\n", | |
" , SUM(purchased.Cost) - SUM(Product.Cost) AS Profit\r\n", | |
"FROM Customer, purchased, Product\r\n", | |
"WHERE MATCH(Customer-(purchased)->Product)\r\n", | |
"GROUP BY\r\n", | |
" Product.Name" | |
], | |
"metadata": { | |
"azdata_cell_guid": "db6d89b9-55c5-445c-a556-ab1753ab9c82", | |
"tags": [] | |
}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Commands completed successfully." | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "display_data", | |
"data": { | |
"text/html": "Total execution time: 00:00:00.058" | |
}, | |
"metadata": {} | |
}, { | |
"output_type": "execute_result", | |
"metadata": {}, | |
"execution_count": 103, | |
"data": { | |
"application/vnd.dataresource+json": { | |
"schema": { | |
"fields": [ | |
{ | |
"name": "Customer" | |
}, | |
{ | |
"name": "Demographic" | |
}, | |
{ | |
"name": "Product" | |
}, | |
{ | |
"name": "is_in" | |
}, | |
{ | |
"name": "purchased" | |
}, | |
{ | |
"name": "recommends" | |
} | |
] | |
}, | |
"data": [ | |
{ | |
"0": "150", | |
"1": "5", | |
"2": "10", | |
"3": "150", | |
"4": "288", | |
"5": "10" | |
} | |
] | |
}, | |
"text/html": [ | |
"<table>", | |
"<tr><th>Customer</th><th>Demographic</th><th>Product</th><th>is_in</th><th>purchased</th><th>recommends</th></tr>", | |
"<tr><td>150</td><td>5</td><td>10</td><td>150</td><td>288</td><td>10</td></tr>", | |
"</table>" | |
] | |
} | |
}, { | |
"output_type": "execute_result", | |
"metadata": {}, | |
"execution_count": 103, | |
"data": { | |
"application/vnd.dataresource+json": { | |
"schema": { | |
"fields": [ | |
{ | |
"name": "Customer" | |
}, | |
{ | |
"name": "Demographic" | |
} | |
] | |
}, | |
"data": [ | |
{ | |
"0": "CUST-6918E1AF-2F34-4C3A-A9DF-98E4A3A9755B", | |
"1": "DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08" | |
}, | |
{ | |
"0": "CUST-7FE07243-AF24-4294-BF79-B1B6454ACB2B", | |
"1": "DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08" | |
}, | |
{ | |
"0": "CUST-39F8ACBD-AEC2-41D4-BC21-D2D628277E08", | |
"1": "DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08" | |
}, | |
{ | |
"0": "CUST-F530193E-823D-4BB7-83E8-053CA4EFFFCC", | |
"1": "DEMO-00A8D9D6-0ECD-4C21-94F6-1997A3850216" | |
}, | |
{ | |
"0": "CUST-2AA0D534-B3AE-4795-804E-94CD696FC342", | |
"1": "DEMO-00A8D9D6-0ECD-4C21-94F6-1997A3850216" | |
} | |
] | |
}, | |
"text/html": [ | |
"<table>", | |
"<tr><th>Customer</th><th>Demographic</th></tr>", | |
"<tr><td>CUST-6918E1AF-2F34-4C3A-A9DF-98E4A3A9755B</td><td>DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08</td></tr>", | |
"<tr><td>CUST-7FE07243-AF24-4294-BF79-B1B6454ACB2B</td><td>DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08</td></tr>", | |
"<tr><td>CUST-39F8ACBD-AEC2-41D4-BC21-D2D628277E08</td><td>DEMO-AD9F8BE5-53EB-424A-A359-6134774CAB08</td></tr>", | |
"<tr><td>CUST-F530193E-823D-4BB7-83E8-053CA4EFFFCC</td><td>DEMO-00A8D9D6-0ECD-4C21-94F6-1997A3850216</td></tr>", | |
"<tr><td>CUST-2AA0D534-B3AE-4795-804E-94CD696FC342</td><td>DEMO-00A8D9D6-0ECD-4C21-94F6-1997A3850216</td></tr>", | |
"</table>" | |
] | |
} | |
}, { | |
"output_type": "execute_result", | |
"metadata": {}, | |
"execution_count": 103, | |
"data": { | |
"application/vnd.dataresource+json": { | |
"schema": { | |
"fields": [ | |
{ | |
"name": "Customer" | |
}, | |
{ | |
"name": "Product" | |
}, | |
{ | |
"name": "Date" | |
}, | |
{ | |
"name": "Cost" | |
} | |
] | |
}, | |
"data": [ | |
{ | |
"0": "CUST-6918E1AF-2F34-4C3A-A9DF-98E4A3A9755B", | |
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C", | |
"2": "2021-04-15 13:43:34.883", | |
"3": "17.0000" | |
}, | |
{ | |
"0": "CUST-6918E1AF-2F34-4C3A-A9DF-98E4A3A9755B", | |
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C", | |
"2": "2021-04-15 13:43:34.883", | |
"3": "18.0000" | |
}, | |
{ | |
"0": "CUST-7FE07243-AF24-4294-BF79-B1B6454ACB2B", | |
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C", | |
"2": "2021-04-15 13:43:34.883", | |
"3": "19.0000" | |
}, | |
{ | |
"0": "CUST-7FE07243-AF24-4294-BF79-B1B6454ACB2B", | |
"1": "PROD-D8453D25-1800-41A4-80E4-165C30027CEB", | |
"2": "2021-04-15 13:43:34.883", | |
"3": "18.0000" | |
}, | |
{ | |
"0": "CUST-39F8ACBD-AEC2-41D4-BC21-D2D628277E08", | |
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C", | |
"2": "2021-04-15 13:43:34.883", | |
"3": "10.0000" | |
} | |
] | |
}, | |
"text/html": [ | |
"<table>", | |
"<tr><th>Customer</th><th>Product</th><th>Date</th><th>Cost</th></tr>", | |
"<tr><td>CUST-6918E1AF-2F34-4C3A-A9DF-98E4A3A9755B</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>2021-04-15 13:43:34.883</td><td>17.0000</td></tr>", | |
"<tr><td>CUST-6918E1AF-2F34-4C3A-A9DF-98E4A3A9755B</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>2021-04-15 13:43:34.883</td><td>18.0000</td></tr>", | |
"<tr><td>CUST-7FE07243-AF24-4294-BF79-B1B6454ACB2B</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>2021-04-15 13:43:34.883</td><td>19.0000</td></tr>", | |
"<tr><td>CUST-7FE07243-AF24-4294-BF79-B1B6454ACB2B</td><td>PROD-D8453D25-1800-41A4-80E4-165C30027CEB</td><td>2021-04-15 13:43:34.883</td><td>18.0000</td></tr>", | |
"<tr><td>CUST-39F8ACBD-AEC2-41D4-BC21-D2D628277E08</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>2021-04-15 13:43:34.883</td><td>10.0000</td></tr>", | |
"</table>" | |
] | |
} | |
}, { | |
"output_type": "execute_result", | |
"metadata": {}, | |
"execution_count": 103, | |
"data": { | |
"application/vnd.dataresource+json": { | |
"schema": { | |
"fields": [ | |
{ | |
"name": "Product" | |
}, | |
{ | |
"name": "Recommendation" | |
}, | |
{ | |
"name": "DemographicId" | |
} | |
] | |
}, | |
"data": [ | |
{ | |
"0": "PROD-E9541A39-D51D-4635-A7B7-76378888D03A", | |
"1": "PROD-889EE0C7-F685-450C-9AD0-87F583A16D32", | |
"2": "1" | |
}, | |
{ | |
"0": "PROD-889EE0C7-F685-450C-9AD0-87F583A16D32", | |
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C", | |
"2": "4" | |
}, | |
{ | |
"0": "PROD-6E8449E5-6EBA-4D31-B782-FD6C15DAD1BD", | |
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C", | |
"2": "5" | |
}, | |
{ | |
"0": "PROD-0E3DC5AC-8EED-4E9D-BF7B-49EB77E5D4DE", | |
"1": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C", | |
"2": "5" | |
}, | |
{ | |
"0": "PROD-56A84B7D-7F1D-4779-AFB2-DC741E59C25D", | |
"1": "PROD-D8453D25-1800-41A4-80E4-165C30027CEB", | |
"2": "5" | |
} | |
] | |
}, | |
"text/html": [ | |
"<table>", | |
"<tr><th>Product</th><th>Recommendation</th><th>DemographicId</th></tr>", | |
"<tr><td>PROD-E9541A39-D51D-4635-A7B7-76378888D03A</td><td>PROD-889EE0C7-F685-450C-9AD0-87F583A16D32</td><td>1</td></tr>", | |
"<tr><td>PROD-889EE0C7-F685-450C-9AD0-87F583A16D32</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>4</td></tr>", | |
"<tr><td>PROD-6E8449E5-6EBA-4D31-B782-FD6C15DAD1BD</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>5</td></tr>", | |
"<tr><td>PROD-0E3DC5AC-8EED-4E9D-BF7B-49EB77E5D4DE</td><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>5</td></tr>", | |
"<tr><td>PROD-56A84B7D-7F1D-4779-AFB2-DC741E59C25D</td><td>PROD-D8453D25-1800-41A4-80E4-165C30027CEB</td><td>5</td></tr>", | |
"</table>" | |
] | |
} | |
}, { | |
"output_type": "execute_result", | |
"metadata": {}, | |
"execution_count": 103, | |
"data": { | |
"application/vnd.dataresource+json": { | |
"schema": { | |
"fields": [ | |
{ | |
"name": "Product" | |
}, | |
{ | |
"name": "Sales" | |
}, | |
{ | |
"name": "Item" | |
}, | |
{ | |
"name": "Price" | |
}, | |
{ | |
"name": "Cost" | |
}, | |
{ | |
"name": "Revenue" | |
}, | |
{ | |
"name": "Profit" | |
} | |
] | |
}, | |
"data": [ | |
{ | |
"0": "PROD-0E3DC5AC-8EED-4E9D-BF7B-49EB77E5D4DE", | |
"1": "27", | |
"2": "5.0000", | |
"3": "13.5185", | |
"4": "135.0000", | |
"5": "365.0000", | |
"6": "230.0000" | |
}, | |
{ | |
"0": "PROD-3C36696E-64EA-4629-A807-E3B4A6B0A369", | |
"1": "26", | |
"2": "5.0000", | |
"3": "14.5000", | |
"4": "130.0000", | |
"5": "377.0000", | |
"6": "247.0000" | |
}, | |
{ | |
"0": "PROD-56A84B7D-7F1D-4779-AFB2-DC741E59C25D", | |
"1": "28", | |
"2": "5.0000", | |
"3": "14.8571", | |
"4": "140.0000", | |
"5": "416.0000", | |
"6": "276.0000" | |
}, | |
{ | |
"0": "PROD-6E8449E5-6EBA-4D31-B782-FD6C15DAD1BD", | |
"1": "27", | |
"2": "4.0000", | |
"3": "14.4444", | |
"4": "108.0000", | |
"5": "390.0000", | |
"6": "282.0000" | |
}, | |
{ | |
"0": "PROD-889EE0C7-F685-450C-9AD0-87F583A16D32", | |
"1": "29", | |
"2": "4.0000", | |
"3": "15.3103", | |
"4": "116.0000", | |
"5": "444.0000", | |
"6": "328.0000" | |
}, | |
{ | |
"0": "PROD-9E174C2D-CAF7-475E-9649-43DC33E899F8", | |
"1": "27", | |
"2": "5.0000", | |
"3": "14.9629", | |
"4": "135.0000", | |
"5": "404.0000", | |
"6": "269.0000" | |
}, | |
{ | |
"0": "PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C", | |
"1": "32", | |
"2": "5.0000", | |
"3": "14.3750", | |
"4": "160.0000", | |
"5": "460.0000", | |
"6": "300.0000" | |
}, | |
{ | |
"0": "PROD-D57DEB0D-5E8F-4035-972C-F247E302B03B", | |
"1": "26", | |
"2": "5.0000", | |
"3": "14.5384", | |
"4": "130.0000", | |
"5": "378.0000", | |
"6": "248.0000" | |
}, | |
{ | |
"0": "PROD-D8453D25-1800-41A4-80E4-165C30027CEB", | |
"1": "32", | |
"2": "5.0000", | |
"3": "14.5937", | |
"4": "160.0000", | |
"5": "467.0000", | |
"6": "307.0000" | |
}, | |
{ | |
"0": "PROD-E9541A39-D51D-4635-A7B7-76378888D03A", | |
"1": "34", | |
"2": "4.0000", | |
"3": "14.0000", | |
"4": "136.0000", | |
"5": "476.0000", | |
"6": "340.0000" | |
} | |
] | |
}, | |
"text/html": [ | |
"<table>", | |
"<tr><th>Product</th><th>Sales</th><th>Item</th><th>Price</th><th>Cost</th><th>Revenue</th><th>Profit</th></tr>", | |
"<tr><td>PROD-0E3DC5AC-8EED-4E9D-BF7B-49EB77E5D4DE</td><td>27</td><td>5.0000</td><td>13.5185</td><td>135.0000</td><td>365.0000</td><td>230.0000</td></tr>", | |
"<tr><td>PROD-3C36696E-64EA-4629-A807-E3B4A6B0A369</td><td>26</td><td>5.0000</td><td>14.5000</td><td>130.0000</td><td>377.0000</td><td>247.0000</td></tr>", | |
"<tr><td>PROD-56A84B7D-7F1D-4779-AFB2-DC741E59C25D</td><td>28</td><td>5.0000</td><td>14.8571</td><td>140.0000</td><td>416.0000</td><td>276.0000</td></tr>", | |
"<tr><td>PROD-6E8449E5-6EBA-4D31-B782-FD6C15DAD1BD</td><td>27</td><td>4.0000</td><td>14.4444</td><td>108.0000</td><td>390.0000</td><td>282.0000</td></tr>", | |
"<tr><td>PROD-889EE0C7-F685-450C-9AD0-87F583A16D32</td><td>29</td><td>4.0000</td><td>15.3103</td><td>116.0000</td><td>444.0000</td><td>328.0000</td></tr>", | |
"<tr><td>PROD-9E174C2D-CAF7-475E-9649-43DC33E899F8</td><td>27</td><td>5.0000</td><td>14.9629</td><td>135.0000</td><td>404.0000</td><td>269.0000</td></tr>", | |
"<tr><td>PROD-C26243F3-E214-4DF3-ABE8-5F39EF50C37C</td><td>32</td><td>5.0000</td><td>14.3750</td><td>160.0000</td><td>460.0000</td><td>300.0000</td></tr>", | |
"<tr><td>PROD-D57DEB0D-5E8F-4035-972C-F247E302B03B</td><td>26</td><td>5.0000</td><td>14.5384</td><td>130.0000</td><td>378.0000</td><td>248.0000</td></tr>", | |
"<tr><td>PROD-D8453D25-1800-41A4-80E4-165C30027CEB</td><td>32</td><td>5.0000</td><td>14.5937</td><td>160.0000</td><td>467.0000</td><td>307.0000</td></tr>", | |
"<tr><td>PROD-E9541A39-D51D-4635-A7B7-76378888D03A</td><td>34</td><td>4.0000</td><td>14.0000</td><td>136.0000</td><td>476.0000</td><td>340.0000</td></tr>", | |
"</table>" | |
] | |
} | |
} | |
], | |
"execution_count": 103 | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
For a given customer's purchase history what products do you recommend?