Assume I have such table
x
OrderLineID OrderID ProductID OrderedQunatity
1 1 2 18
2 1 10 9
3 2 3 12
4 2 8 2
5 2 14 2
7 4 3 1
8 4 5 3
9 5 6 2
15 4 4 0
What I would like to do is compare every single OrderedQuantity with average orderedQuantity for exact product.
For example OrderedQuantity for OrderID = 2 and ProductID = 3 is equal to 12, so I check average OrderedQuantity for ProductID = 3, so (12+1)/2 = 6.5 and if it is smaller than exact orderQuantity (in this example 12) I select it.
Can someone help what should i type in SELECT?
Thank you!
Advertisement
Answer
One method is a correlated subquery:
select t.*
from t
where t.OrderedQuantity < (select avg(t2.OrderedQuantity)
from t t2
where t2.ProductID
);
Note that some databases do integer averages of integers. So you might need avg(t2.OrderedQuantity * 1.0)
to get all values less than the average.