Mysql 货币的聚合函数SUM()

Mysql 货币的聚合函数SUM(),mysql,Mysql,要求是使用SUM()添加员工的工资,工资采用此格式1,00005.00,因此当1,00005.00+3,00005.00时,其结果为4而非实际结果, 这是查询--> 尝试删除薪水中的所有“”,然后使用sum()。您可以使用mysql函数 主要问题是您的货币是否为十进制类型。你的格式为“1,00005.00”,包含两个和三个数字的分组,这让我很好奇 如果是,如果“1,99997”+“0,00003”等于“2,00000”,则可以使用Hắc休伊ền Minh的答案,并立即将其转换为十进制等效值 但是

要求是使用SUM()添加员工的工资,工资采用此格式
1,00005.00
,因此当
1,00005.00+3,00005.00
时,其结果为4而非实际结果, 这是查询-->

尝试删除薪水中的所有“”,然后使用sum()。您可以使用mysql函数


主要问题是您的货币是否为十进制类型。你的格式为“1,00005.00”,包含两个三个数字的分组,这让我很好奇

如果是,如果“1,99997”+“0,00003”等于“2,00000”,则可以使用Hắc休伊ền Minh的答案,并立即将其转换为十进制等效值

但是,在执行此操作之前,我会对数据库运行一个验收测试,以验证所有值是否确实符合您期望的格式。否则,您可能会在工作中引入错误
VARCHAR
type没有任何验证,某人的工资可能为“1,0X,000.15”,这在转换后被视为相当于10英镑

如果您的货币是而不是十进制类型-例如,如果“1,05,03”的意思是“”-那么“1,05,03”+“1,19,09”不是“2,24,12”,而是“3,05,00”-因为十二便士而不是十便士等于一先令,二十先令等于一磅

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


对于重量,你认为如果一磅由20先令组成,那么每先令是一磅的1/20,因此等于0.05;所以“1,05”变成了1+5*0.05=1.25。对于便士,十二便士等于一先令,即0.05磅,因此一便士等于0.05/12=0.00416666。。。(你会发现一个困难。你需要一个更大的数字类型来防止数字错误蔓延)。

工资字段的类型是什么?@sectus data type is
varchar
数字中没有逗号。。。。。如果要将其保存在带有逗号的varchar中,请停止这样做。。。。。将字段转换为数字,并存储一个不带数字的值commas@SoftwareDev,那么,价值观是如何形成的呢?我明白了。这对OP-@H来说是个好消息ắ丘伊ềnMinh的答案应该有效。仅确保运行验收测试,以防万一。(而且,在我看来,将值存储为货币类型,并且仅在显示时对其进行格式化更为实际)。
SELECT employee.name, SUM( department.salary ) AS Salary
 FROM department
 LEFT JOIN employee ON department.employee_id = employee.id
 GROUP BY name
SELECT employee.name, SUM( replace(department.salary,",","") ) AS
Salary  FROM department  LEFT JOIN employee ON department.employee_id
= employee.id  GROUP BY name