Files
sql_advanced/lab2-12/task2.sql
T
Vitalii Litvinchuk 9884d8e5af
Advanced SQL Quality Check / Lint SQL Scripts (push) Failing after 16s
feat: lab 12
2026-05-05 11:14:57 +03:00

128 lines
4.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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';