在MYSQL中获得毫克,克和公斤的总和

时间:2016-06-26 05:53:17

标签: mysql sql select sum

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

答案是错误的,我不知道增加质量或体积的公式是什么。

1 个答案:

答案 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;