如何从表中的相同列添加两种值

时间:2017-06-07 05:21:16

标签: mysql sql database relational-database

我在MySQL数据存储中有一个名为Expenses的表。表格结构和数据如下:

   ---------------
   |YEAR|Expenses|
   |----|--------|
   |2015|503K    |
   |----|--------|
   |2015|406K    |
   |----|--------|
   |2015|1.2M    |
   |----|--------|
   |2016|700K    |
   |----|--------|
   |2016|900K    |
   |----|--------|
   |2016|3.2M    |
   |----|--------|
   |2016|4.7M    |
   ---------------

我需要取所有以' K'结尾的值的总和,按年将结果分组并将结果乘以1000.同样,我需要得到以&结尾的所有值的总和#39; M',按年份对结果进行分组,并将结果乘以1000000.最后,我需要添加K值和M值的结果,并获得每年的总费用。我的决赛桌应该有两种不同的格式:

   ---------------
   |YEAR|Expenses|
   |----|--------|
   |2015|2109000 |
   |----|--------|
   |2016|9500000 |
   |----|--------|

   ---------------
   |YEAR|Expenses|
   |----|--------|
   |2015|2.1M    |
   |----|--------|
   |2016|9.5M    |
   |----|--------|

有任何建议或指导吗?

2 个答案:

答案 0 :(得分:1)

即使mysql确实允许你添加以非数字字符结尾的值,我建议你不要习惯于认为其他sql方言也是如此。

select year,
         cast(
         sum(case when instr(expenses,'k') > 0.0 then
                cast(replace(expenses,'k','') as decimal(15,2)) * 1000
                when instr(expenses,'m') > 0.0 then
                cast(replace(expenses,'m','') as decimal(15,2)) * 1000000
         end 
         ) 
         as int ) en
from t
group by year

结果

+------+---------+
| year | en      |
+------+---------+
| 2015 | 2109000 |
| 2016 | 9500000 |
+------+---------+
2 rows in set, 7 warnings (0.00 sec)

答案 1 :(得分:0)

您可以使用以下内容:

SELECT
    year,
    sum(
        CASE
            WHEN expenses like '%K' then expenses*1000
            WHEN expenses like '%M' then expenses*1000000
        END) AS expenses
FROM
    table_name
GROUP BY
    year
ORDER BY
    year;

希望它有所帮助。有趣的是,mysql允许您添加以非数字字符结尾的值。不知道那个。