我使用十进制(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;
答案是错误的,我不知道增加质量或体积的公式是什么。
最佳答案
这个问题有两个部分。首先,您应该正确添加权重,这意味着将它们转换为相同单位后将其全部添加。为了避免精度下降,让我们以毫克为单位添加它们:
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 kg或更大的任何东西都将以kg显示,介于1 gr和1 kg之间的任何东西都将以克显示,而小于该值的任何东西将以毫克显示:
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;