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';