So I tried to use a function I created into a query and when I execute the query it runs forever. The function finds the customer that his orders had the biggest quantity of products in it. The query returns him along with any other customer that has ordered the same amount of products.
Here is the function:
CREATE OR REPLACE FUNCTION max_orderQty ()
RETURNS bigint
AS $$
SELECT SUM(OrderQty)
FROM Customer,SalesOrderHeader,SalesOrderDetail
WHERE Customer.CustomerID = SalesOrderHeader.CustomerID
AND SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID
GROUP BY SalesOrderHeader.CustomerID
ORDER BY SUM(OrderQty) DESC LIMIT 1;
$$ LANGUAGE SQL;
Here is the the query:
SELECT SUM(OrderQty),SalesOrderHeader.CustomerID
FROM Customer,SalesOrderHeader,SalesOrderDetail
WHERE Customer.CustomerID = SalesOrderHeader.CustomerID
AND SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID
GROUP BY SalesOrderHeader.CustomerID
HAVING SUM(OrderQty) = max_orderQty();
Also this works and it solves the same thing:(in 220ms)
SELECT SUM(OrderQty),SalesOrderHeader.CustomerID
FROM Customer,SalesOrderHeader,SalesOrderDetail
WHERE Customer.CustomerID = SalesOrderHeader.CustomerID
AND SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID
GROUP BY SalesOrderHeader.CustomerID
HAVING SUM(OrderQty) = (SELECT SUM(OrderQty)
FROM Customer,SalesOrderHeader,SalesOrderDetail
WHERE Customer.CustomerID = SalesOrderHeader.CustomerID
AND SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID
GROUP BY SalesOrderHeader.CustomerID
ORDER BY SUM(OrderQty) DESC LIMIT 1);
So when I tried to split it to function/query it just runs forever and I cannot find the reason why.And I thought using a function instead would be faster.Is that wrong?
Any help is very appreciated. Thanks in advance.
explain analyzebut as your query runs "forever" that is not an option)