I have a query that returns the min, max, avg and total for two different products. The client however wants the min, max, avg and total combined for both products. However I have an undesired result returned when I try to sum the two products and try to aggregate the date.
The following SQL query returns the individual data for both product:
SELECT
CONVERT(date, DateTimeNow) AS Date,
MIN(FT1) AS Minimum1 ,
MAX(FT1) AS Maximum1,
AVG(FT1) AS Average1,
MAX(FQ1) AS Total1,
MIN(FT2) AS Minimum2,
MAX(FT2) AS Maximum2,
AVG(FT2) AS Average2,
MAX(FQ2) AS Total2
FROM Data
GROUP BY CONVERT(date, DateTimeNow)
ORDER BY CONVERT(date, DateTimeNow);
I then modified the query to the following:
SELECT
CONVERT(date, DateTimeNow) AS Date,
MIN(FT1+FT2) AS Minimum ,
MAX(FT1+FT2) AS Maximum,
AVG(FT1+FT2) AS Average,
MAX(FQ1+FT2) AS Total
FROM Data
GROUP BY CONVERT(date, DateTimeNow)
ORDER BY CONVERT(date, DateTimeNow);
However when I run the second query the results don’t add up. As an example Minimum does not add up to the first query Minimum1 + Minimum2
Advertisement
Answer
I understand that you are storing each product in a different column in the same table. The logic to compute the combined minimum, average and maximum might be as follows :
SELECT
CONVERT(date, DateTimeNow) AS Date,
CASE WHEN MIN(FT1) < MIN(FT2) THEN MIN(FT1) ELSE MIN(FT2) END AS Minimum,
CASE WHEN MAX(FT1) > MAX(FT2) THEN MAX(FT1) ELSE MAX(FT2) END AS Maximum,
( AVG(FT1) + AVG(FT2) ) / 2 AS Average,
SUM(FT1) + SUM(FT2) AS Total
FROM Data
GROUP BY CONVERT(date, DateTimeNow)
ORDER BY CONVERT(date, DateTimeNow);
Meaning :
- minimum is the lowest value between the minimum of product 1 and the minimum of product 2
- maximum is the highest value between the maximum of product 1 and the maximum of product 2
- average is the average of the average of product 1 and the average of product 2
- total is the sum of both queries
You can adapt these rules as needed according to your requiremens (which you did not fully specified).