【发布时间】:2016-06-26 05:53:17
【问题描述】:
我使用数据类型 decimal(10,3),现在我尝试获取所有列的 SUM,它的返回取决于所有单位的 SUM。
例如:
0.789 mg
98.057 g
5.008 kg
查询是自动计算的,但是如何计算呢?
我试过了:
SELECT CONCAT(SUM(prod_name,'-',prod_quantity,' ',
CASE WHEN prod_unit = 'mg' THEN 'g'
ELSE prod_unit
END)) AS shortName
FROM prod_table;
答案是错误的,我不知道添加质量或体积的公式是什么。
【问题讨论】:
-
表结构是什么?
-
您可能应该以最小公分母的重量存储所有项目。在您的情况下,这将是
mg中的所有产品。因此,重量为 5.008 公斤的物品的重量值为 5008000(等于产品重量,单位为毫克)。当你想显示一个产品的重量时,很容易通过一个简单的函数将5008000转换为"5.008 kg"。这将使您的许多事情变得更容易。例如,您可以轻松地按重量排序或对许多物品的重量求和,而无需预先转换单位。 简答:修正你存储数据的方式,你的问题就会消失。 -
或者作为另一个例子,这更容易通过产品价格之类的东西看到。价格(作为一个例子)可以由美元和美分组成。存储一些具有美分价值的产品而另一些具有美元价值的产品将是愚蠢的。以美分表示所有产品(
INT类型)或以美元表示所有产品(DECIMAL类型)。做出选择并使其保持一致。这是最重要的部分。 -
我还强烈建议您将这些存储在一个通用单元中,以避免意外混淆单元的严重混乱。这很有可能发生故障,有人认为他们正在运输 10 公斤的材料,而实际上它是 10 吨。