Stock Product Quantity Unit ------------------------------- 001 5 box 001 10 bottle 001 60 gallon Conversion Unit1 Unit2 Rate ---------------------- box bottle 20 bottle gallon 30 Unit1 = Unit2 * Rate
How to write SQL query to sum(quantity) in certain unit (such as bottle in the example)?
select product, sum(quantity * ....) from Stock group by product
can a database function such as getRate(unit1, unit2) do the job? how about the performance?
Advertisement
Answer
You need to expand the conversion table so it has all combinations. This is a one time effort, but you need to add rows like this:
Unit1 Unit2 Rate ---------------------- box bottle 20 bottle gallon 30 gallon bottle 1/30
Then you can use a LEFT JOIN
:
SELECT s.product, SUM(s.quantity * coalesce(c.rate, 1)) FROM stock s LEFT JOIN conversion c ON s.unit = c.unit1 AND c.unit2 = 'bottle' GROUP BY s.product