DELIMITER $$
DROP FUNCTION IF EXISTS mosha $$
CREATE FUNCTION mosha( Datelindja DATE) RETURNS INT
READS SQL DATA
BEGIN
DECLARE emp_age INT;
SET emp_age = YEAR(NOW()) - YEAR(Datelindja);
RETURN emp_age ;
END $$
DELIMITER ;
-- ------------------------------------------------------------------------
SELECT employeeID, FirstName, LastName, mosha(Birthdate) AS Emp_age
FROM employees;
-- ------------------------------------------------------------------------
DELIMITER $$
DROP FUNCTION IF EXISTS Cus_NrOrders $$
CREATE FUNCTION Cus_NrOrders ( CusID CHAR(5)) RETURNS INT
READS SQL DATA
BEGIN
DECLARE Cus_orders INT;
SET Cus_orders = (SELECT COUNT(*) FROM orders WHERE CustomerID = CusID);
RETURN Cus_Orders;
END $$
DELIMITER ;
-- ------------------------------------------------------------------------
SELECT CustomerID, CompanyName, Cus_NrOrders(CustomerID) AS Total
FROM Customers
-- -------------------------------------------------------------------------
DELIMITER $$
DROP FUNCTION IF EXISTS Cus_Total $$
CREATE FUNCTION Cus_Total ( CusID CHAR(5)) RETURNS DOUBLE
READS SQL DATA
BEGIN
DECLARE Cus_sum DOUBLE;
SET Cus_sum = (SELECT SUM(b.UnitPrice * b.Quantity * (1-b.Discount))
FROM orders AS a
INNER JOIN
order_details AS b ON a.OrderID = b.OrderID
WHERE a.CustomerID = CusID);
RETURN Cus_sum;
END $$
DELIMITER ;
-- ------------------------------------------------------------------------
SELECT CustomerID, CompanyName, Cus_Total(CustomerID) AS Total
FROM Customers
-- ------------------------------------------------------------------------
DELIMITER $$
DROP FUNCTION IF EXISTS VIP_Check $$
CREATE FUNCTION VIP_CHECK (CusID CHAR(5)) RETURNS VARCHAR(15)
READS SQL DATA
BEGIN
DECLARE Third_Cus INT;
DECLARE Cus_NumOrder INT;
DECLARE Cus_Result VARCHAR(15);
SET Third_Cus = ( SELECT COUNT(*) AS Num_orders
FROM orders
GROUP BY CustomerID
ORDER BY Num_Orders DESC
LIMIT 2, 1
);
SET Cus_numOrder = (SELECT COUNT(*) FROM orders WHERE CustomerID = CusID);
IF Cus_numOrder >= Third_Cus THEN
SET Cus_Result = 'VIP';
ELSE
SET Cus_Result = 'NON-VIP';
END IF;
RETURN Cus_Result ;
END $$
DELIMITER ;
-- -----------------------------------------------------------------------------
SELECT CustomerID, CompanyName, Cus_NrOrders(CustomerID) AS Num_Orders,
VIP_CHECK(CustomerID) AS Cus_Status
FROM Customers
ORDER BY Num_Orders DESC ;
-- -----------------------------------------------------------------------------
DELIMITER $$
DROP FUNCTION IF EXISTS Emp_NumOrders $$
CREATE FUNCTION Emp_NumOrders (EmpID INT) RETURNS DOUBLE
READS SQL DATA
BEGIN
DECLARE Emp_Total DOUBLE;
SET Emp_Total = (SELECT SUM(b.UnitPrice * b.Quantity * (1-b.Discount))
FROM orders AS a
INNER JOIN
order_details AS b ON a.OrderID = b.OrderID
WHERE a.EmployeeID = EmpID
);
RETURN Emp_total;
END $$
DELIMITER ;
-- ------------------------------------------------------------------------
SELECT EmployeeID, FirstName, LastName,
Emp_NumOrders(EmployeeID) AS Total_sum
FROM employees
-- --------------------------------------------------------------------------
DELIMITER $$
DROP FUNCTION IF EXISTS Emp_Order_status $$
CREATE FUNCTION Emp_Order_status (EmpID INT) RETURNS VARCHAR(20)
READS SQL DATA
BEGIN
DECLARE Emp_status VARCHAR(20);
DECLARE Emp_avg DECIMAL(6,2);
DECLARE Emp_Num_orders INT;
SET Emp_avg = ( SELECT AVG(t1.Num_orders) AS Emp_AvgOrders
FROM ( SELECT EmployeeID, Count(OrderID) AS Num_orders
FROM orders
GROUP BY EmployeeID
) AS t1
);
SET Emp_Num_orders = ( SELECT COUNT(*)
FROM orders
WHERE employeeID = EmpID
);
IF Emp_Num_orders >= Emp_avg THEN
SET Emp_status = 'Above Average';
ELSE
SET Emp_status = 'Below Average';
END IF;
Return Emp_status;
END $$
DELIMITER ;
-- ----------------------------------------------------------------------------------
SELECT EmployeeID, FirstName, LastName,
Emp_Order_status(EmployeeID) AS Emp_status
FROM employees
-- -----------------------------------------------------------------------------------
DELIMITER $$
DROP FUNCTION IF EXISTS Cus_Year_OrdersNUM $$
CREATE FUNCTION Cus_Year_OrdersNUM (CusID CHAR(5), Orders_Year INT) RETURNS INT
READS SQL DATA
BEGIN
DECLARE Year_Orders INT;
SET Year_Orders = ( SELECT COUNT(OrderID)
FROM orders
WHERE CustomerID = CusID AND YEAR(OrderDate) = Orders_Year
);
RETURN Year_Orders;
END $$
DELIMITER ;
-- ----------------------------------------------------------------------------------
SELECT CustomerID, CompanyName, Cus_Year_OrdersNUM(CustomerID, 2008) AS Orders2008
FROM Customers
-- ----------------------------------------------------------------------------------
No comments:
Post a Comment