我使用十进制数据类型(10,3),现在我尝试获取所有列的SUM,它将返回取决于所有单位的SUM。
E.g:
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;
答案是错误的,我不知道增加质量或体积的公式是什么。
答案 0 :(得分:2)
这个问题分为两部分。首先,您应该正确添加权重,这意味着在将它们转换为相同单位后将它们全部添加。为了避免精度损失,让我们以毫克为单位添加它们:
SELECT SUM(prod_quantity * CASE prod_unit WHEN 'mg' THEN 1
WHEN 'g' THEN 1000
WHEN 'kg' THEN 1000000
END) sum_milligrams
FROM prod_table;
这将以毫克为单位给出结果。现在,我们可以通过决定显示输出的单位来处理美化输出。例如,我们可以决定重量为1千克或更多的任何东西都会以千克为单位显示,1克到1千克之间的任何东西都会以克为单位显示,而小于1千克的任何东西都会以毫克显示:
SELECT CASE WHEN s > 1000000 THEN CONCAT(s/1000000.0, ' kg')
WHEN s BETWEEN 1000 AND 1000000 THEN CONCAT(s/1000, ' g')
ELSE CONCAT(s, ' mg')
END
FROM (SELECT SUM(prod_quantity * CASE prod_unit WHEN 'mg' THEN 1
WHEN 'g' THEN 1000
WHEN 'kg' THEN 1000000
END AS s
FROM prod_table) t;