我在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 |
|----|--------|
有任何建议或指导吗?
答案 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允许您添加以非数字字符结尾的值。不知道那个。