我使用十进制(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;

10-06 02:38