This commit is contained in:
@@ -0,0 +1,535 @@
|
||||
DROP DATABASE Lucky_Shrub;
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS Lucky_Shrub;
|
||||
|
||||
USE Lucky_Shrub;
|
||||
|
||||
CREATE TABLE Clients (
|
||||
ClientID VARCHAR(10) primary key,
|
||||
FullName VARCHAR(100),
|
||||
ContactNumber INT,
|
||||
AddressID INT
|
||||
);
|
||||
|
||||
CREATE TABLE Products (
|
||||
ProductID VARCHAR(10) primary key,
|
||||
ProductName VARCHAR(100),
|
||||
BuyPrice DECIMAL(6, 2),
|
||||
SellPrice DECIMAL(6, 2),
|
||||
NumberOfItems INT
|
||||
);
|
||||
|
||||
Create table Addresses (
|
||||
AddressID INT PRIMARY KEY,
|
||||
Street VARCHAR(255),
|
||||
County VARCHAR(100)
|
||||
);
|
||||
|
||||
CREATE TABLE Employees (
|
||||
EmployeeID INT primary key,
|
||||
FullName VARCHAR(100),
|
||||
JobTitle VARCHAR(50),
|
||||
Department VARCHAR(200),
|
||||
AddressID INT
|
||||
);
|
||||
|
||||
CREATE TABLE Activity (
|
||||
ActivityID INT PRIMARY KEY,
|
||||
Properties JSON
|
||||
);
|
||||
|
||||
CREATE TABLE Audit (
|
||||
AuditID INT AUTO_INCREMENT PRIMARY KEY,
|
||||
OrderDateTime TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE Orders (
|
||||
OrderID INT NOT NULL PRIMARY KEY,
|
||||
ClientID VARCHAR(10),
|
||||
ProductID VARCHAR(10),
|
||||
Quantity INT,
|
||||
Cost DECIMAL(6, 2),
|
||||
Date DATE,
|
||||
FOREIGN KEY (ClientID) REFERENCES Clients (ClientID),
|
||||
FOREIGN KEY (ProductID) REFERENCES Products (ProductID)
|
||||
);
|
||||
|
||||
CREATE TABLE Notifications (
|
||||
NotificationID INT AUTO_INCREMENT PRIMARY KEY,
|
||||
Notification VARCHAR(256),
|
||||
DateTime TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO
|
||||
Employees (
|
||||
EmployeeID,
|
||||
FullName,
|
||||
JobTitle,
|
||||
Department,
|
||||
AddressID
|
||||
)
|
||||
VALUES (
|
||||
1,
|
||||
"Seamus Hogan",
|
||||
"Manager",
|
||||
"Management",
|
||||
7
|
||||
),
|
||||
(
|
||||
2,
|
||||
"Thomas Eriksson",
|
||||
"Assistant ",
|
||||
"Sales",
|
||||
8
|
||||
),
|
||||
(
|
||||
3,
|
||||
"Simon Tolo",
|
||||
"Head Chef",
|
||||
"Management",
|
||||
9
|
||||
),
|
||||
(
|
||||
4,
|
||||
"Francesca Soffia",
|
||||
"Assistant ",
|
||||
"Human Resources",
|
||||
10
|
||||
),
|
||||
(
|
||||
5,
|
||||
"Emily Sierra",
|
||||
"Accountant",
|
||||
"Finance",
|
||||
11
|
||||
),
|
||||
(
|
||||
6,
|
||||
"Greta Galkina",
|
||||
"Accountant",
|
||||
"Finance",
|
||||
12
|
||||
);
|
||||
|
||||
INSERT INTO
|
||||
Activity (ActivityID, Properties)
|
||||
VALUES (
|
||||
1,
|
||||
'{ "ClientID": "Cl1", "ProductID": "P1", "Order": "True" }'
|
||||
),
|
||||
(
|
||||
2,
|
||||
'{ "ClientID": "Cl2", "ProductID": "P4", "Order": "False" }'
|
||||
),
|
||||
(
|
||||
3,
|
||||
'{ "ClientID": "Cl5", "ProductID": "P5", "Order": "True" }'
|
||||
);
|
||||
|
||||
INSERT INTO
|
||||
Clients (
|
||||
ClientID,
|
||||
FullName,
|
||||
ContactNumber,
|
||||
AddressID
|
||||
)
|
||||
VALUES (
|
||||
"Cl1",
|
||||
"Takashi Ito",
|
||||
351786345,
|
||||
1
|
||||
),
|
||||
(
|
||||
"Cl2",
|
||||
"Jane Murphy",
|
||||
351567243,
|
||||
2
|
||||
),
|
||||
(
|
||||
"Cl3",
|
||||
"Laurina Delgado",
|
||||
351342597,
|
||||
3
|
||||
),
|
||||
(
|
||||
"Cl4",
|
||||
"Benjamin Clauss",
|
||||
351342509,
|
||||
4
|
||||
),
|
||||
(
|
||||
"Cl5",
|
||||
"Altay Ayhan",
|
||||
351208983,
|
||||
5
|
||||
),
|
||||
(
|
||||
"Cl6",
|
||||
"Greta Galkina",
|
||||
351298755,
|
||||
6
|
||||
);
|
||||
|
||||
INSERT INTO
|
||||
Products (
|
||||
ProductID,
|
||||
ProductName,
|
||||
BuyPrice,
|
||||
SellPrice,
|
||||
NumberOfITems
|
||||
)
|
||||
VALUES (
|
||||
"P1",
|
||||
"Artificial grass bags ",
|
||||
40,
|
||||
50,
|
||||
100
|
||||
),
|
||||
(
|
||||
"P2",
|
||||
"Wood panels",
|
||||
15,
|
||||
20,
|
||||
250
|
||||
),
|
||||
(
|
||||
"P3",
|
||||
"Patio slates",
|
||||
35,
|
||||
40,
|
||||
60
|
||||
),
|
||||
(
|
||||
"P4",
|
||||
"Sycamore trees ",
|
||||
7,
|
||||
10,
|
||||
50
|
||||
),
|
||||
(
|
||||
"P5",
|
||||
"Trees and Shrubs",
|
||||
35,
|
||||
50,
|
||||
75
|
||||
),
|
||||
(
|
||||
"P6",
|
||||
"Water fountain",
|
||||
65,
|
||||
80,
|
||||
15
|
||||
);
|
||||
|
||||
INSERT INTO
|
||||
Addresses (AddressID, Street, County)
|
||||
VALUES (
|
||||
1,
|
||||
"291 Oak Wood Avenue",
|
||||
"Graham County"
|
||||
),
|
||||
(
|
||||
2,
|
||||
"724 Greenway Drive",
|
||||
"Pinal County"
|
||||
),
|
||||
(
|
||||
3,
|
||||
"102 Sycamore Lane",
|
||||
"Santa Cruz County"
|
||||
),
|
||||
(
|
||||
4,
|
||||
"125 Roselawn Close",
|
||||
"Gila County"
|
||||
),
|
||||
(
|
||||
5,
|
||||
"831 Beechwood Terrace",
|
||||
"Cochise County"
|
||||
),
|
||||
(
|
||||
6,
|
||||
"755 Palm Tree Hills",
|
||||
"Mohave County"
|
||||
),
|
||||
(
|
||||
7,
|
||||
"751 Waterfall Hills",
|
||||
"Tuscon County"
|
||||
),
|
||||
(
|
||||
8,
|
||||
"878 Riverside Lane",
|
||||
"Tuscon County"
|
||||
),
|
||||
(
|
||||
9,
|
||||
"908 Seaview Hills",
|
||||
"Tuscon County"
|
||||
),
|
||||
(
|
||||
10,
|
||||
"243 Waterview Terrace",
|
||||
"Tuscon County"
|
||||
),
|
||||
(
|
||||
11,
|
||||
"148 Riverview Lane",
|
||||
"Tuscon County"
|
||||
),
|
||||
(
|
||||
12,
|
||||
"178 Seaview Avenue",
|
||||
"Tuscon County"
|
||||
);
|
||||
|
||||
INSERT INTO
|
||||
Orders (
|
||||
OrderID,
|
||||
ClientID,
|
||||
ProductID,
|
||||
Quantity,
|
||||
Cost,
|
||||
Date
|
||||
)
|
||||
VALUES (
|
||||
1,
|
||||
"Cl1",
|
||||
"P1",
|
||||
10,
|
||||
500,
|
||||
"2020-09-01"
|
||||
),
|
||||
(
|
||||
2,
|
||||
"Cl2",
|
||||
"P2",
|
||||
5,
|
||||
100,
|
||||
"2020-09-05"
|
||||
),
|
||||
(
|
||||
3,
|
||||
"Cl3",
|
||||
"P3",
|
||||
20,
|
||||
800,
|
||||
"2020-09-03"
|
||||
),
|
||||
(
|
||||
4,
|
||||
"Cl4",
|
||||
"P4",
|
||||
15,
|
||||
150,
|
||||
"2020-09-07"
|
||||
),
|
||||
(
|
||||
5,
|
||||
"Cl3",
|
||||
"P3",
|
||||
10,
|
||||
450,
|
||||
"2020-09-08"
|
||||
),
|
||||
(
|
||||
6,
|
||||
"Cl2",
|
||||
"P2",
|
||||
5,
|
||||
800,
|
||||
"2020-09-09"
|
||||
),
|
||||
(
|
||||
7,
|
||||
"Cl1",
|
||||
"P4",
|
||||
22,
|
||||
1200,
|
||||
"2020-09-10"
|
||||
),
|
||||
(
|
||||
8,
|
||||
"Cl3",
|
||||
"P1",
|
||||
15,
|
||||
150,
|
||||
"2020-09-10"
|
||||
),
|
||||
(
|
||||
9,
|
||||
"Cl1",
|
||||
"P1",
|
||||
10,
|
||||
500,
|
||||
"2020-09-12"
|
||||
),
|
||||
(
|
||||
10,
|
||||
"Cl2",
|
||||
"P2",
|
||||
5,
|
||||
100,
|
||||
"2020-09-13"
|
||||
),
|
||||
(
|
||||
11,
|
||||
"Cl4",
|
||||
"P5",
|
||||
5,
|
||||
100,
|
||||
"2020-09-15"
|
||||
),
|
||||
(
|
||||
12,
|
||||
"Cl1",
|
||||
"P1",
|
||||
10,
|
||||
500,
|
||||
"2022-09-01"
|
||||
),
|
||||
(
|
||||
13,
|
||||
"Cl2",
|
||||
"P2",
|
||||
5,
|
||||
100,
|
||||
"2022-09-05"
|
||||
),
|
||||
(
|
||||
14,
|
||||
"Cl3",
|
||||
"P3",
|
||||
20,
|
||||
800,
|
||||
"2022-09-03"
|
||||
),
|
||||
(
|
||||
15,
|
||||
"Cl4",
|
||||
"P4",
|
||||
15,
|
||||
150,
|
||||
"2022-09-07"
|
||||
),
|
||||
(
|
||||
16,
|
||||
"Cl3",
|
||||
"P3",
|
||||
10,
|
||||
450,
|
||||
"2022-09-08"
|
||||
),
|
||||
(
|
||||
17,
|
||||
"Cl2",
|
||||
"P2",
|
||||
5,
|
||||
800,
|
||||
"2022-09-09"
|
||||
),
|
||||
(
|
||||
18,
|
||||
"Cl1",
|
||||
"P4",
|
||||
22,
|
||||
1200,
|
||||
"2022-09-10"
|
||||
),
|
||||
(
|
||||
19,
|
||||
"Cl3",
|
||||
"P1",
|
||||
15,
|
||||
150,
|
||||
"2022-09-10"
|
||||
),
|
||||
(
|
||||
20,
|
||||
"Cl1",
|
||||
"P1",
|
||||
10,
|
||||
500,
|
||||
"2022-09-12"
|
||||
),
|
||||
(
|
||||
21,
|
||||
"Cl2",
|
||||
"P2",
|
||||
5,
|
||||
100,
|
||||
"2022-09-13"
|
||||
),
|
||||
(
|
||||
22,
|
||||
"Cl2",
|
||||
"P1",
|
||||
10,
|
||||
500,
|
||||
"2021-09-01"
|
||||
),
|
||||
(
|
||||
23,
|
||||
"Cl2",
|
||||
"P2",
|
||||
5,
|
||||
100,
|
||||
"2021-09-05"
|
||||
),
|
||||
(
|
||||
24,
|
||||
"Cl3",
|
||||
"P3",
|
||||
20,
|
||||
800,
|
||||
"2021-09-03"
|
||||
),
|
||||
(
|
||||
25,
|
||||
"Cl4",
|
||||
"P4",
|
||||
15,
|
||||
150,
|
||||
"2021-09-07"
|
||||
),
|
||||
(
|
||||
26,
|
||||
"Cl1",
|
||||
"P3",
|
||||
10,
|
||||
450,
|
||||
"2021-09-08"
|
||||
),
|
||||
(
|
||||
27,
|
||||
"Cl2",
|
||||
"P1",
|
||||
20,
|
||||
1000,
|
||||
"2022-09-01"
|
||||
),
|
||||
(
|
||||
28,
|
||||
"Cl2",
|
||||
"P2",
|
||||
10,
|
||||
200,
|
||||
"2022-09-05"
|
||||
),
|
||||
(
|
||||
29,
|
||||
"Cl3",
|
||||
"P3",
|
||||
20,
|
||||
800,
|
||||
"2021-09-03"
|
||||
),
|
||||
(
|
||||
30,
|
||||
"Cl1",
|
||||
"P1",
|
||||
10,
|
||||
500,
|
||||
"2022-09-01"
|
||||
);
|
||||
@@ -0,0 +1,36 @@
|
||||
#####################################################
|
||||
###################### Task 1: ##################
|
||||
|
||||
1. Створіть фукнцію FindAverageCost(), яка повертає значення середньої ціни продажу всіх продуктів
|
||||
за певний рік. Рік має вводитися користувачем як вхідний параметр функції.
|
||||
|
||||
2. Запустіть функцію для різних років.
|
||||
На знімку екрана нижче показано середню вартість, отриману функцією FindAverageCost()
|
||||
на основі даних користувача за 2022 рік:
|
||||
https://drive.google.com/open?id=18QemvhMFkhWVARePoW3m0A7cmrtlEvl7&usp=drive_fs
|
||||
|
||||
output table:
|
||||
FindAverageCost(2022)
|
||||
value
|
||||
|
||||
select * from Products;
|
||||
|
||||
drop function FindAverageCost;
|
||||
|
||||
create function FindAverageCost(InputYear int)
|
||||
returns float
|
||||
deterministic
|
||||
begin
|
||||
declare AverageCost float;
|
||||
|
||||
select round(avg(Cost), 2)
|
||||
into AverageCost
|
||||
from Orders
|
||||
where year(Date) = InputYear;
|
||||
|
||||
return AverageCost;
|
||||
end;
|
||||
|
||||
set @year = 2022;
|
||||
|
||||
select FindAverageCost (@year);
|
||||
@@ -0,0 +1,43 @@
|
||||
#####################################################
|
||||
###################### Task 2: ##################
|
||||
1. Створіть збережену процедуру EvaluateProduct, яка дозволить у якості трьох вихідних параметрів
|
||||
вивести загальну кількість товарів, проданих протягом 2020, 2021, 2022 років відповідно для продукту,
|
||||
ідентифікатор якого вказує користувач в якості вхідного пераметра процедури.
|
||||
2. Викличте процедуру вказавши в якості вхідного параметра "P1" та вивівши вихідні параметри у змінні
|
||||
3. Відобразіть значення змінних з допомогою SELECT.
|
||||
4. Спробуйте інші вхідні параметри.
|
||||
На знімку екрана нижче показано загальну кількість товарів, проданих упродовж 2020, 2021, 2022 років
|
||||
для продукту з ідентифікатором "P1":
|
||||
https://drive.google.com/open?id=18QndcPAEP6PRhUSI16h_MYx8FAWcM7r_&usp=drive_fs
|
||||
|
||||
output table:
|
||||
@Sold_Items_2020 | @Sold_Items_2021 | @Sold_Items_2022
|
||||
value1 | value2 | value3
|
||||
|
||||
drop procedure EvaluateProduct;
|
||||
|
||||
create procedure EvaluateProduct(in product_id varchar(10), out sold_2020 int, out sold_2021 int, out sold_2022 int)
|
||||
begin
|
||||
select sum(Quantity) into sold_2020
|
||||
from Orders
|
||||
where ProductID = product_id and year(Date) = 2020;
|
||||
|
||||
select sum(Quantity) into sold_2021
|
||||
from Orders
|
||||
where ProductID = product_id and year(Date) = 2021;
|
||||
|
||||
select sum(Quantity) into sold_2022
|
||||
from Orders
|
||||
where ProductID = product_id and year(Date) = 2022;
|
||||
end;
|
||||
|
||||
set @Sold_Items_2020 = 0, @Sold_Items_2021 = 0, @Sold_Items_2022 = 0;
|
||||
|
||||
call EvaluateProduct (
|
||||
'P2',
|
||||
@Sold_Items_2020,
|
||||
@Sold_Items_2021,
|
||||
@Sold_Items_2022
|
||||
);
|
||||
|
||||
select @Sold_Items_2020, @Sold_Items_2021, @Sold_Items_2022;
|
||||
@@ -0,0 +1,58 @@
|
||||
#####################################################
|
||||
###################### Task 3: ##################
|
||||
1. Створіть тригер під назвою UpdateAudit. Цей тригер має спрацьовувати ПІСЛЯ вставки нового замовлення
|
||||
в таблицю Orders й додавати запис у таблицю Audit про дату та час замовлення. Поле AuditID заповнювати
|
||||
не потрібно, оскільки воно заповнюєься автоматично як лічильник.
|
||||
2. Для перевірки роботи тригера введіть три нових записи у таблицю замовлень за сьогоднішнє число.
|
||||
3. Виведіть вміст таблиць Orders (за сьогоднішнє число) та Audit.
|
||||
На наступному знімку екрана показано приклад виводу вмісту таблиць Orders та Audit:
|
||||
https://drive.google.com/open?id=18QqRc6_XjOJkXUSSKsPadPmakhXQ6U-k&usp=drive_fs
|
||||
|
||||
select * from Audit;
|
||||
|
||||
drop trigger UpdateAudit;
|
||||
|
||||
create trigger UpdateAudit
|
||||
after insert on Orders
|
||||
for each row
|
||||
begin
|
||||
insert into Audit(`OrderDateTime`) values (now());
|
||||
end;
|
||||
|
||||
INSERT INTO
|
||||
Orders (
|
||||
OrderID,
|
||||
ClientID,
|
||||
ProductID,
|
||||
Quantity,
|
||||
Cost,
|
||||
Date
|
||||
)
|
||||
VALUES (
|
||||
100,
|
||||
"Cl1",
|
||||
"P1",
|
||||
10,
|
||||
500,
|
||||
curdate()
|
||||
),
|
||||
(
|
||||
101,
|
||||
"Cl2",
|
||||
"P2",
|
||||
5,
|
||||
100,
|
||||
curdate()
|
||||
),
|
||||
(
|
||||
102,
|
||||
"Cl3",
|
||||
"P3",
|
||||
20,
|
||||
800,
|
||||
curdate()
|
||||
);
|
||||
|
||||
select * from Orders where Date = curdate();
|
||||
|
||||
select * from Audit;
|
||||
@@ -0,0 +1,23 @@
|
||||
#####################################################
|
||||
###################### Task 4: ##################
|
||||
1. Створіть оптимізований запит, який виведе інформацію про місцезнаходження клієнтів та співробітників.
|
||||
У вивід слід включити:
|
||||
• Повні імена (FullName) всіх клієнтів і співробітників із таблиць Clients і Employees.
|
||||
• Адресу (Street, County) кожної людини з таблиці адрес.
|
||||
2. Дані повинні бути впорядковані за назвою вулиці. Зверніть увагу, поле Street починається з
|
||||
назви будинку а не з назви вулиці.
|
||||
Результат виводу показаний на наступному скриншоті:
|
||||
https://drive.google.com/open?id=18SkH6ZmbGctCkWbYtKFcolmmE-v6Nudk&usp=drive_fs
|
||||
|
||||
select * from Clients;
|
||||
|
||||
select FullName, Street, County
|
||||
from Clients
|
||||
join Addresses on Clients.AddressID = Addresses.AddressID
|
||||
union all
|
||||
select FullName, Street, County
|
||||
from Employees
|
||||
join Addresses on Employees.AddressID = Addresses.AddressID
|
||||
order by SUBSTRING(
|
||||
Street, LOCATE(' ', Street) + 1
|
||||
) asc;
|
||||
@@ -0,0 +1,33 @@
|
||||
#####################################################
|
||||
###################### Task 5: ##################
|
||||
Наступний запит повертає загальну кількість дерев’яних панелей (ідентифікатор P2),
|
||||
проданих в 2020, 2021 і 2022 роках:
|
||||
|
||||
explain
|
||||
|
||||
SELECT CONCAT(SUM(Cost), " (2020)") AS "Total sum of P2 Product"
|
||||
FROM Orders
|
||||
WHERE
|
||||
YEAR(Date) = 2020
|
||||
AND ProductID = "P2"
|
||||
UNION
|
||||
SELECT CONCAT(SUM(Cost), " (2021)")
|
||||
FROM Orders
|
||||
WHERE
|
||||
YEAR(Date) = 2021
|
||||
AND ProductID = "P2"
|
||||
UNION
|
||||
SELECT CONCAT(SUM(Cost), " (2022)")
|
||||
FROM Orders
|
||||
WHERE
|
||||
YEAR(Date) = 2022
|
||||
AND ProductID = "P2";
|
||||
|
||||
|
||||
Вивід з цього запиту показано на скриншоті нижче:
|
||||
https://drive.google.com/open?id=18UCCsysObMJhtmc7saumSbN-JkeS5lQW&usp=drive_fs
|
||||
|
||||
1. Оптимізуйте цей запит.
|
||||
|
||||
select
|
||||
2. Здійсніть вивід та порівняйте з виводом початкового запиту
|
||||
@@ -0,0 +1,23 @@
|
||||
#####################################################
|
||||
###################### Task 6: ##################
|
||||
У таблиці Activity реєструється інформація про діяльність клієнтів, які користуються інтернет-магазином,
|
||||
зокрема ClientID та ProductID для кожної дії в стовпці JSON Properties. Це відбувається,
|
||||
коли клієнти переглядають продукти в Інтернеті. На наступному скриншоті показано таблицю активності:
|
||||
https://drive.google.com/open?id=18UUaS39qzfLsIyXuKg0TGzhL3rrivfqR&usp=drive_fs
|
||||
|
||||
1. Напишіть запит, який виведе:
|
||||
ClientID, ProductID для всіх клієнтів, які виконували дії, повне ім’я (FullName)
|
||||
та контактний номер (ContactNumber) кожного клієнта з таблиці Клієнти (Clients).
|
||||
2. Здійсніть вивід запиту
|
||||
|
||||
select
|
||||
Properties ->> '$.ClientID' as ClientID,
|
||||
Properties ->> '$.ProductID' as ProductID,
|
||||
FullName,
|
||||
ContactNumber
|
||||
from
|
||||
Activity
|
||||
join Clients on Properties ->> '$.ClientID' = Clients.ClientID;
|
||||
|
||||
Результат запиту має відповідати результатам показаним на скриншоті нижче:
|
||||
https://drive.google.com/open?id=18Vpzx4hWNZ5-5LR7fNnoI9fs93IBXWqD&usp=drive_fs
|
||||
@@ -0,0 +1,36 @@
|
||||
#####################################################
|
||||
###################### Task 7: ##################
|
||||
1. Створіть збережену процедуру під назвою GetProfit, яка повертає загальний прибуток, отриманий
|
||||
від певного продукту за певний рік. В якості параметрів процедури користувач повинне ввести значення
|
||||
для ProductID та року.
|
||||
Наприклад, результат процедури GetProfit із ProductID="P1" і 2020 роком показано на скриншоті нижче:
|
||||
https://drive.google.com/open?id=18W3lTIs6yJlSw99k6uq1g5oPhSqLnd63&usp=drive_fs
|
||||
|
||||
set @ProductID = "P1", @year = 2020;
|
||||
|
||||
select * from Products;
|
||||
|
||||
select * from Orders;
|
||||
|
||||
drop procedure GetProfit;
|
||||
|
||||
create procedure GetProfit(in inputYear int, in inputProductId varchar(10))
|
||||
begin
|
||||
declare TotalProfit float default 0;
|
||||
|
||||
select round(sum(SellPrice * Quantity - (BuyPrice * Quantity)), 2)
|
||||
into TotalProfit
|
||||
from Orders
|
||||
join Products on Orders.ProductID = Products.ProductID
|
||||
where YEAR(Date) = inputYear and Products.ProductID = inputProductId;
|
||||
|
||||
select TotalProfit as profit;
|
||||
end;
|
||||
|
||||
2. Виведіть значення процедури для кількох різних параметрів.
|
||||
|
||||
call GetProfit ("2020", "P1");
|
||||
|
||||
call GetProfit ("2020", "P2");
|
||||
|
||||
call GetProfit ("2020", "P3");
|
||||
@@ -0,0 +1,34 @@
|
||||
#####################################################
|
||||
###################### Task 8: ##################
|
||||
Створіт представлення (VIEW) з назвою DataSummary, яке об’єднає чотири таблиці (Клієнти (Clients),
|
||||
Адреси (Addresses), Замовлення (Orders), Продукти (Products)).
|
||||
1. Віртуальна таблиця повинна відображати такі дані:
|
||||
• Повне ім’я (FullName) та контактний телефон (ContactNumber) для кожного клієнта з таблиці Clients.
|
||||
• Округ (County), у якому проживає кожен клієнт, з таблиці Addresses.
|
||||
• Назва продукту (ProductName), який вони придбали в таблиці Products.
|
||||
• Ідентифікатор продукту (ProductID), вартість (Cost) і дату (Date) кожного замовлення з таблиці Orders.
|
||||
2. Віртуальна таблиця має:
|
||||
2.1 відображати відповідні дані лише за 2022 рік.
|
||||
2.2 впорядковувати вивід даних за вартістю у порядку спадання.
|
||||
Приклад показано на наступному знімку екрана:
|
||||
https://drive.google.com/open?id=18WYAMaBZMfHn1et6GUaIANCdzEmWgVZM&usp=drive_fs
|
||||
|
||||
create view DataSummary as
|
||||
select
|
||||
FullName,
|
||||
ContactNumber,
|
||||
County,
|
||||
ProductName,
|
||||
Products.ProductID,
|
||||
Cost,
|
||||
Date
|
||||
from
|
||||
Clients
|
||||
join Addresses on Clients.AddressID = Addresses.AddressID
|
||||
join Orders on Clients.ClientID = Orders.ClientID
|
||||
join Products on Orders.ProductID = Products.ProductID
|
||||
where
|
||||
YEAR(Date) = 2022
|
||||
order by Cost desc;
|
||||
|
||||
select * from DataSummary;
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
Самостійна 2-9 – 2-12
|
||||
|
||||
База даних Lucky Shrub складається з таких таблиць: Клієнти (Clients), Замовлення (Orders), Продукти (Products), Адреси (Addresses), Співробітники (Employees), Аудит (Audit), Повідомлення (Notifications) та Діяльність (Activity), як показано на наступній ER-схемі: https://drive.google.com/open?id=18QdwKZFf2nbnRDP__leAWjYNaBaKarNx&usp=drive_fs
|
||||
|
||||
Слід використати MySQL для здійснення бізнес аналітики та оптимізації деяких запитів.
|
||||
|
||||
##################################################
|
||||
Для виконання роботи Вам потрібна буде база даних Lucky_Shrub із нобором таблиць та даних.
|
||||
Видаліть якщо є стару базу даних Lucky_Shrub та відновіть її з бекап-версії: https://drive.google.com/open?id=18nJipQRUzjnWikOEVsoleddWgQQis1TJ&usp=drive_fs
|
||||
|
||||
Або ж, для створення/привадення бази даних у початковий стан використайте наступний код в MySQL:
|
||||
##################################################
|
||||
|
||||
###############################################
|
||||
############### Завдання #################
|
||||
###############################################
|
||||
Reference in New Issue
Block a user