MySQL替换字符串SUM然后总计

时间:2014-10-18 01:01:33

标签: mysql sql replace sum union

希望从替换字段的总和中获取每个ID的总计。

SELECT
    insurance_carrier as ID, SUM(REPLACE(REPLACE(REPLACE(es_reserve,'$',''),',',''),'-','')) AS es_reserve,
    SUM(REPLACE(REPLACE(REPLACE(structure_reserve,'$',''),',',''),'-',''))AS structure_reserve,
    SUM(es_reserve+structure_reserve) AS total
FROM job_tbl
WHERE
    job_status NOT IN(2,4,6,7,9) AND
    insurance_carrier !=0 AND      
    FROM_UNIXTIME(date_of_loss,'%m') = MONTH(NOW()) AND
    FROM_UNIXTIME(date_of_loss,'%Y') = YEAR(NOW())
GROUP BY insurance_carrier

我从es_reserve和structure_reserve获得结果,但总数为0.

BTW这些字段包含$ 2,300之类的项目,这是替换的原因

任何帮助将不胜感激!!!

编辑:这是产生的结果

Array
(
[ID] => 14
[es_reserve] => 5000
[structure_reserve] => 35000
)

Array
(
[ID] => 15
[es_reserve] => 2500
[structure_reserve] => 2500
)

Array
(
[ID] => 41
[es_reserve] => 2500
[structure_reserve] => 2500
)

Array
(
[ID] => 44
[es_reserve] => 2500
[structure_reserve] => 
)

以下是我希望制作的内容

Array
(
[ID] => 14
[es_reserve] => 5000
[structure_reserve] => 35000
[total] => 40000
)

Array
(
[ID] => 15
[es_reserve] => 2500
[structure_reserve] => 2500
[total] => 5000
)

Array
(
[ID] => 41
[es_reserve] => 2500
[structure_reserve] => 2500
[total] => 5000
)

Array
(
[ID] => 44
[es_reserve] => 2500
[structure_reserve] => 
[total] => 2500
)

1 个答案:

答案 0 :(得分:1)

总列在原始列值上进行求和,在选择中定义的别名不会在同一个选择中使用。 您可以在进行总列计算时重复替换语句

SUM(  REPLACE(REPLACE(REPLACE(es_reserve,'$',''),',',''),'-','') 
      + REPLACE(REPLACE(REPLACE(structure_reserve,'$',''),',',''),'-',''))
Total, 

而不是

SUM(es_reserve+structure_reserve) as total 

查询变为,按照评论中的要求排序。

SELECT insurance_carrier as ID, SUM(REPLACE(REPLACE(REPLACE(es_reserve,'$',''),',',''),'-','')) AS es_reserve, SUM(REPLACE(REPLACE(REPLACE(structure_reserve,'$',''),',',''),'-',''))AS structure_reserve, SUM( REPLACE(REPLACE(REPLACE(es_reserve,'$',''),',',''),'-','') + REPLACE(REPLACE(REPLACE(structure_reserve,'$',''),',',''),'-','')) as Total FROM job_tbl WHERE job_status NOT IN(2,4,6,7,9) AND insurance_carrier !=0 AND FROM_UNIXTIME(date_of_loss,'%m') = MONTH(NOW()) AND FROM_UNIXTIME(date_of_loss,'%Y') = YEAR(NOW()) GROUP BY insurance_carrier
order by SUM( REPLACE(REPLACE(REPLACE(es_reserve,'$',''),',',''),'-','') + REPLACE(REPLACE(REPLACE(structure_reserve,'$',''),',',''),'-','')) desc

OR 将它用作子查询

SELECT T.*,     SUM(es_reserve+structure_reserve) AS total
FROM 
(

SELECT
    insurance_carrier as ID, SUM(REPLACE(REPLACE(REPLACE(es_reserve,'$',''),',',''),'-','')) AS es_reserve,
    SUM(REPLACE(REPLACE(REPLACE(structure_reserve,'$',''),',',''),'-',''))AS structure_reserve

FROM job_tbl
WHERE
    job_status NOT IN(2,4,6,7,9) AND
    insurance_carrier !=0 AND      
    FROM_UNIXTIME(date_of_loss,'%m') = MONTH(NOW()) AND
    FROM_UNIXTIME(date_of_loss,'%Y') = YEAR(NOW())
GROUP BY insurance_carrier
) T