mysql - 带数量单位转换的group-by查询sql怎么写?

标签 mysql sql oracle subquery

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 查询来计算特定单位(例如示例中的瓶子)的 sum(quantity)?

select product, sum(quantity * ....) from Stock group by product

getRate(unit1, unit2) 之类的数据库函数可以完成这项工作吗?性能如何?

最佳答案

您需要扩展转换表,使其包含所有组合。这是一次性的工作,但您需要像这样添加行:

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

关于mysql - 带数量单位转换的group-by查询sql怎么写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55505746/

相关文章:

php - 在php中组合多个sql查询

java - JDBC:如何在准备好的语句中执行功能?

oracle - 有没有办法在 Oracle 11g 中强制表/列注释

MySQL 子查询在 3 个表上返回超过 1 行

mysql - 如何在 Zend Framework2 中使用 MySql 的方法 DATE_ADD、DATE_FORMAT

php - 如何从两个 MySQL 表中显示用户

python - MySQL:进行基本搜索

sql - 查看具有表中某个列的外键的所有表?

SQL 聚合函数失败

RegEx:带有尾随和前导空格的所有行