汇总函数SUM()换钱

时间:2015-01-30 08:12:55

标签: mysql

要求是使用SUM()添加员工的工资,工资是这种格式1,00,005.00所以当1,00,005.00 + 3,00,005.00给出结果为4而非实际结果时, 这是查询---->

SELECT employee.name, SUM( department.salary ) AS Salary
 FROM department
 LEFT JOIN employee ON department.employee_id = employee.id
 GROUP BY name

2 个答案:

答案 0 :(得分:0)

尝试删除所有","在工资,然后使用sum()。你可以使用mysql replace函数

SELECT employee.name, SUM( replace(department.salary,",","") ) AS
Salary  FROM department  LEFT JOIN employee ON department.employee_id
= employee.id  GROUP BY name

答案 1 :(得分:0)

主要问题是您的货币是否为小数类型。您的格式" 1,00,005.00"有两个三个数字的组使我感到奇怪。

如果是,如果" 1,99,997" +" 0,00,003"等于" 2,00,000",那么您可以使用HắcHuyềnMinh的答案并立即将其转换为十进制等值。

在此之前,我会在数据库上运行验收测试,以验证所有值确实都是您期望的格式。否则,您可能会在工作中引入错误。 VARCHAR类型没有任何验证,有人的工资可能是" 1,0X,000.15"在转换后,它将被视为等同于 10

如果您的货币不是十进制类型 - 例如,如果" 1,05,03"意味着" one pound five shilling three pennies" - 然后" 1,05,03" +" 1,19,09"是" 2,24,12"而是" 3,05,00" - 因为十二便士而不是十几便士,所以要先赚二十先令。

在这种情况下,您可以通过加权将其转换为十进制,或者选择所有行并在代码中而不是在MySQL中执行求和。也可以实现UDF来执行求和或转换为十进制。

对于加权,你认为如果一磅由20先令组成,则每先令为1/20的1磅,因此等于0.05;所以" 1,05"变为1 + 5 * 0.05 = 1.25。对于便士来说,十二便士制造一个先令0.05磅,所以一分钱是0.05 / 12 = 0.00416666 ...(并且你看到一个难度。你需要一个更大的数字类型来防止数字错误蔓延)。 / p>