#!pip install ipython-sql
#!pip install pysqlite3
import sqlalchemy as alchemy
alchemy.create_engine('sqlite:///alfajores.db')
%load_ext sql
%sql sqlite:///alfajores.db
It is required to use '%%sql' in Jupyter to indicate that is a SQL cell (if the code is executed in SQL it is not required).
Comments in SQL are: / comment /. It can be used to avoid executing lines.
%%sql
/*DROP TABLE Movements;
DROP TABLE Master_Prod;
DROP TABLE Master_Prov;
DROP TABLE Master_Brand;
DROP TABLE Profit_by_dates;
DROP TABLE Profit_by_brand;*/
%%sql
CREATE TABLE Master_Brand
(Cod_Brand integer PRIMARY KEY AUTOINCREMENT,
Description varchar(50));
%%sql
INSERT INTO Master_Brand
(Description)
VALUES
('Terrabusi');
INSERT INTO Master_Brand
(Description)
VALUES
('Havanna');
INSERT INTO Master_Brand
(Description)
VALUES
('Balcarce');
INSERT INTO Master_Brand
(Description)
VALUES
('Guaymallen');
%%sql
SELECT *
FROM Master_Brand;
%%sql
CREATE TABLE Master_Prov
(Cod_Prov integer primary key AUTOINCREMENT,
Description varchar(50),
Adress varchar(50),
PhoneNumber integer);
%%sql
INSERT INTO Master_Prov
(Description, Adress, PhoneNumber)
VALUES
('Pedrito', 'Av. del Maestro 123, CABA', 45657898);
INSERT INTO Master_Prov
(Description, Adress, PhoneNumber)
VALUES
('Juancito', 'Papudo 48, CABA', 26428486);
INSERT INTO Master_Prov
(Description, Adress, PhoneNumber)
VALUES
('Pocho', 'Jacob Aals 45, CABA', 15846235);
%%sql
SELECT *
FROM Master_Prov;
%%sql
CREATE TABLE Master_Prod
(Cod_Prod integer PRIMARY KEY AUTOINCREMENT,
Cod_Brand integer REFERENCES Master_Brand(Cod_Brand),
Cod_Prov integer REFERENCES Master_Prov(Cod_Prov),
Description varchar(50));
%%sql
INSERT INTO Master_Prod
(Cod_Brand, Cod_Prov, Description)
VALUES
(1, 1, 'Fruta');
INSERT INTO Master_Prod
(Cod_Brand, Cod_Prov, Description)
VALUES
(1, 1, 'Dulce de leche');
INSERT INTO Master_Prod
(Cod_Brand, Cod_Prov, Description)
VALUES
(2, 2, 'Nuez');
INSERT INTO Master_Prod
(Cod_Brand, Cod_Prov, Description)
VALUES
(3, 1, 'Fruta');
INSERT INTO Master_Prod
(Cod_Brand, Cod_Prov, Description)
VALUES
(3, 1, 'Chocolate');
INSERT INTO Master_Prod
(Cod_Brand, Cod_Prov, Description)
VALUES
(4, 3, 'Fruta');
INSERT INTO Master_Prod
(Cod_Brand, Cod_Prov, Description)
VALUES
(4, 3, 'Dulce de Leche');
INSERT INTO Master_Prod
(Cod_Brand, Cod_Prov, Description)
VALUES
(4, 3, 'Chocolate');
INSERT INTO Master_Prod
(Cod_Brand, Cod_Prov, Description)
VALUES
(1, 1, 'Nuez');
INSERT INTO Master_Prod
(Cod_Brand, Cod_Prov, Description)
VALUES
(2, 3, 'Chocolate');
INSERT INTO Master_Prod
(Cod_Brand, Cod_Prov, Description)
VALUES
(3, 2, 'Dulce de leche');
INSERT INTO Master_Prod
(Cod_Brand, Cod_Prov, Description)
VALUES
(3, 2, 'Nuez');
%%sql
SELECT *
FROM Master_Prod;
%%sql
CREATE TABLE Movements
(Cod_Mov integer PRIMARY KEY AUTOINCREMENT,
Cod_Prod integer REFERENCES Master_Prod(Cod_Prod),
Date date,
Quantity integer,
Cost float,
Price float);
%%sql
INSERT INTO Movements
(Cod_Prod, Date, Quantity, Cost, Price)
VALUES
(1, '2019-01-11', 4, 25.11, 36.45);
INSERT INTO Movements
(Cod_Prod, Date, Quantity, Cost, Price)
VALUES
(2, '2019-01-13', 8, 27.11, 38.45);
INSERT INTO Movements
(Cod_Prod, Date, Quantity, Cost, Price)
VALUES
(3, '2019-01-13', 4, 24.11, 40.45);
INSERT INTO Movements
(Cod_Prod, Date, Quantity, Cost, Price)
VALUES
(4, '2019-01-15', 1, 28.11, 42.45);
INSERT INTO Movements
(Cod_Prod, Date, Quantity, Cost, Price)
VALUES
(5, '2019-01-17', 2, 28.11, 42.45);
INSERT INTO Movements
(Cod_Prod, Date, Quantity, Cost, Price)
VALUES
(6, '2019-01-17', 3, 22.11, 38.22);
INSERT INTO Movements
(Cod_Prod, Date, Quantity, Cost, Price)
VALUES
(2, '2019-02-19', 4, 27.11, 38.45);
INSERT INTO Movements
(Cod_Prod, Date, Quantity, Cost, Price)
VALUES
(8, '2019-02-21', 1, 33.12, 54.65);
INSERT INTO Movements
(Cod_Prod, Date, Quantity, Cost, Price)
VALUES
(3, '2019-03-01', 4, 24.11, 40.45);
INSERT INTO Movements
(Cod_Prod, Date, Quantity, Cost, Price)
VALUES
(8, '2019-03-11', 2, 33.12, 54.65);
INSERT INTO Movements
(Cod_Prod, Date, Quantity, Cost, Price)
VALUES
(1, '2019-04-01', 4, 25.11, 36.45);
INSERT INTO Movements
(Cod_Prod, Date, Quantity, Cost, Price)
VALUES
(6, '2019-04-05', 3, 22.11, 38.22);
%%sql
SELECT *
FROM Movements;
%%sql
SELECT sum(Quantity * Price) TotalSales,
sum(Quantity * Cost) TotalCost,
(sum(Quantity * Price) - sum(Quantity * Cost)) TotalProfit
FROM Movements
%%sql
SELECT Date,
round(sum(Quantity * Cost),2) TotalSales,
round(sum(Quantity * Price),2) TotalCost,
round((sum(Quantity * Price) - sum(Quantity * Cost)),2) TotalProfit
FROM Movements
GROUP BY Date
%%sql
SELECT PR.Cod_Prov,
PR.Description,
round(sum(Quantity * Cost),2) TotalSales,
round(sum(Quantity * Price),2) TotalCost,
round((sum(Quantity * Price) - sum(Quantity * Cost)),2) TotalProfit
FROM Movements M
INNER JOIN Master_Prod P ON M.Cod_Prod = P. Cod_Prod
INNER JOIN Master_Prov PR ON P.Cod_Prov = PR.Cod_Prov
GROUP BY PR.Cod_Prov
%%sql
SELECT Ma.Description, round(AVG(Price),2) AveragePrice
FROM Movements M
INNER JOIN Master_Prod P ON M.Cod_Prod = P.Cod_Prod
INNER JOIN Master_Brand Ma ON P.Cod_Brand = Ma.Cod_Brand
GROUP BY Ma.Description
%%sql
SELECT P.Description, round(AVG(Price),2) AveragePrice
FROM Movements M
INNER JOIN Master_Prod P ON M.Cod_Prod = P.Cod_Prod
INNER JOIN Master_Brand B ON P.Cod_Brand = B.Cod_Brand
GROUP BY P.Description
%%sql
SELECT M.Date, P.Description Product, Ma.Description Brand,
Pr.Description Provider, M.Quantity,
(Quantity*M.Cost) as Cost,
(Quantity* M.Price) as Sales,
round((Quantity *M.Price-Quantity*M.Cost),2) as Profit
FROM Movements M
INNER JOIN Master_Prod P ON M.Cod_Prod = P.Cod_Prod
INNER JOIN Master_Brand Ma ON P.Cod_Brand = Ma.Cod_Brand
INNER JOIN Master_Prov Pr ON P.Cod_Prov = Pr.Cod_Prov
ORDER BY M.Date
%%sql
CREATE TABLE Profit_by_dates
(Date date,
Profit integer);
%%sql
INSERT INTO Profit_by_dates
(Date, Profit)
SELECT Date, round((Quantity*Price-Quantity*Cost),2)
FROM Movements
GROUP BY Date
ORDER BY Date ASC;
select *
from Profit_by_dates;
%%sql
CREATE TABLE Profit_by_brand
(Cod_Brand integer,
Brand varchar(50),
Profit integer);
%%sql
INSERT INTO Profit_by_brand
(Cod_brand, Brand, Profit)
SELECT B.Cod_Brand, B.Description, ROUND(SUM(Quantity*Price-Quantity*Cost),2)
FROM Movements M
INNER JOIN Master_Prod P ON M.Cod_Prod = P.Cod_Prod
INNER JOIN Master_Brand B ON P.Cod_Brand = B.Cod_Brand
GROUP BY B.Cod_Brand;
select *
from Profit_by_brand;
%%sql
UPDATE Movements
SET Cod_Prod = 3;
SELECT *
FROM Movements;
%%sql
UPDATE Master_Prod
SET Cod_Prov = 3
WHERE Cod_Prod IN (SELECT Cod_Prod
FROM Master_Prod
WHERE Description LIKE 'D%');
SELECT *
FROM Master_Prod
WHERE Description LIKE 'D%';