128 lines
4.2 KiB
SQL
128 lines
4.2 KiB
SQL
use Lucky_Shrub;
|
||
|
||
###############################################
|
||
############### Завдання #################
|
||
###############################################
|
||
|
||
################################################
|
||
############### Завдання 1 #################
|
||
Для того, щоб дізнатися, скільки замовлень було розміщено у 2022 році клієнтами з ідентифікаторами
|
||
Cl1, Cl2 і Cl3 було створено наступний запит:
|
||
|
||
SELECT CONCAT(
|
||
"Cl1: ", COUNT(OrderID), " orders"
|
||
) AS "Total number of orders"
|
||
FROM Orders
|
||
WHERE
|
||
YEAR(Date) = 2022
|
||
AND ClientID = "Cl1"
|
||
UNION
|
||
SELECT CONCAT(
|
||
"Cl2: ", COUNT(OrderID), " orders"
|
||
)
|
||
FROM Orders
|
||
WHERE
|
||
YEAR(Date) = 2022
|
||
AND ClientID = "Cl2"
|
||
UNION
|
||
SELECT CONCAT(
|
||
"Cl3: ", COUNT(OrderID), " orders"
|
||
)
|
||
FROM Orders
|
||
WHERE
|
||
YEAR(Date) = 2022
|
||
AND ClientID = "Cl3";
|
||
|
||
--------------------------------------
|
||
1. Оптимізуйте даний запит із використанням загальних табличних виразів (CTE)
|
||
|
||
WITH
|
||
CTE1 AS (
|
||
SELECT CONCAT(
|
||
"Cl1: ", COUNT(OrderID), " orders"
|
||
) AS "Total number of orders"
|
||
FROM Orders
|
||
WHERE
|
||
YEAR(Date) = 2022
|
||
AND ClientID = "Cl1"
|
||
),
|
||
CTE2 AS (
|
||
SELECT CONCAT(
|
||
"Cl2: ", COUNT(OrderID), " orders"
|
||
)
|
||
FROM Orders
|
||
WHERE
|
||
YEAR(Date) = 2022
|
||
AND ClientID = "Cl2"
|
||
),
|
||
CTE3 AS (
|
||
SELECT CONCAT(
|
||
"Cl3: ", COUNT(OrderID), " orders"
|
||
)
|
||
FROM Orders
|
||
WHERE
|
||
YEAR(Date) = 2022
|
||
AND ClientID = "Cl3"
|
||
)
|
||
SELECT *
|
||
FROM CTE1
|
||
UNION
|
||
SELECT *
|
||
FROM CTE2
|
||
UNION
|
||
SELECT *
|
||
FROM CTE3;
|
||
|
||
################################################
|
||
############### Завдання 2 #################
|
||
--------------------------------------
|
||
1. Створіть підготовлений запит з назвою GetOrderDetail.
|
||
Підготовлений запит має приймати два вхідні аргументи: значення ClientID і значення року.
|
||
Вибірка має повернути ID замовлення, кількість, вартість замовлення та дату замовлення з таблиці Orders.
|
||
|
||
select * from Orders;
|
||
|
||
prepare GetOrderDetail
|
||
from 'SELECT OrderID, Quantity, Cost, Date FROM Orders WHERE ClientID = ? AND YEAR(Date) = ?';
|
||
|
||
set @ClientID = "Cl1";
|
||
|
||
set @Year = "2022";
|
||
|
||
execute GetOrderDetail using @ClientID, @Year;
|
||
|
||
--------------------------------------
|
||
2. Здійсніть вибірку даних із використанням піготованого запиту з такими значеннми
|
||
змінних ClientID (Cl1) і 2020 рік.
|
||
|
||
CALL GetOrderDetail ('Cl1', 2020);
|
||
|
||
set @ClientID = "Cl1";
|
||
|
||
set @Year = "2020";
|
||
|
||
execute GetOrderDetail using @ClientID, @Year;
|
||
|
||
################################################
|
||
############### Завдання 3 #################
|
||
|
||
У таблиці Activity бази даних Lucky_Shrub здійснюється реєстрація інформацію про кожну угоду
|
||
у стовпці Properties у форматі JSON.
|
||
Інформацію можна переглянути з допомогою запиту:
|
||
|
||
SELECT * FROM Activity;
|
||
--------------------------------------
|
||
1. Вам потрібно вивести ID продукту, назву, ціну покупки та ціну продажу продукту,
|
||
для яких атрибут Orders у таблиці Activity набуває значення "True".
|
||
--Порада: для отримання доступ до значень поля Properties без подвійних лапок із типу даних
|
||
JSON слід скористатися синксисом:
|
||
->>'$.Propertys_name'
|
||
/*замість*/ ->'$.Propertys_name'
|
||
|
||
select * from Products;
|
||
|
||
select p.ProductID, p.ProductName, p.BuyPrice, p.SellPrice
|
||
FROM Products p
|
||
JOIN Activity a ON p.ProductID = a.Properties ->> '$.ProductID'
|
||
WHERE
|
||
a.Properties ->> '$.Order' = 'True'; |