如何编写带有数量单位转换的分组查询SQL?
Posted
技术标签:
【中文标题】如何编写带有数量单位转换的分组查询SQL?【英文标题】:how to write group-by query SQL with quantity unit conversion? 【发布时间】:2019-04-03 23:31:11 【问题描述】: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
如何编写SQL查询求和(数量)以一定的单位(如示例中的瓶子)?
select product, sum(quantity * ....) from Stock group by product
像 getRate(unit1, unit2) 这样的数据库函数可以完成这项工作吗?性能怎么样?
【问题讨论】:
预期的输出是什么? 【参考方案1】:您需要展开转换表,使其包含所有组合。这是一次性的工作,但您需要像这样添加行:
Unit1 Unit2 Rate
----------------------
box bottle 20
bottle gallon 30
gallon bottle 1/30
然后你可以使用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
【讨论】:
有没有办法即时添加这些额外费率,例如使用视图?谢谢。 @Sunnyday 。 . .它可能变得相当复杂,需要某种递归 CTE。 添加额外费率会使用户更难管理。自定义函数 getRate(unit1, unit2) 怎么样?谢谢。 @SunnyDay 。 . .这取决于您使用的是什么数据库以及您必须处理多少个不同的单元。一个函数是可以的,但通常会影响性能——如果表很大的话。以上是关于如何编写带有数量单位转换的分组查询SQL?的主要内容,如果未能解决你的问题,请参考以下文章