Mysql 获取客户呼叫的总成本

Mysql 获取客户呼叫的总成本,mysql,sql,Mysql,Sql,我有两张表=客户和他们的通话记录 现在,我想根据通话持续时间对他们收费,具体的月份也一样,比如2015年1月 以下是计算通话费用的标准: A) 对于来电,收费为每秒1个单位示例如果持续时间为250秒,则成本为250 B) 对于拨出的电话,前两分钟的费用固定为500个单位。对于随后的几秒钟,成本为2个单位/秒 例如,如果输出持续时间为5分钟,则成本为500个单位+2*3*60个单位=860个单位 下表如下: 包含id、姓名、电话等列的客户表 历史记录表,包括列id、传入电话、传出电话、持续时间、已

我有两张表=客户和他们的通话记录

现在,我想根据通话持续时间对他们收费,具体的月份也一样,比如2015年1月

以下是计算通话费用的标准:

A) 对于来电,收费为每秒1个单位<代码>示例如果持续时间为250秒,则成本为250

B) 对于拨出的电话,
前两分钟的费用固定为500个单位
。对于随后的几秒钟,成本为
2个单位/秒

例如,如果输出持续时间为5分钟,则成本为
500个单位+2*3*60个单位=860个单位

下表如下:

包含id、姓名、电话等列的客户表

历史记录表,包括列id、传入电话、传出电话、持续时间、已拨电话(YYYY-MM-DD)

我对自己的情况提出了以下疑问:

来电费用:

select c.name, c.phone, h.duration as cost
from customer c join history h on c.phone = h.incoming_phone
select c.name, c.phone, CASE
    WHEN h.duration > 120 THEN 500 + 2*(h.duration-120)
    ELSE 2*(h.duration-120)
END; as cost
from customer c join history h on c.phone = h.outgoing_phone
当我运行上面的查询时,我没有得到任何语法错误

拨出电话费用:

select c.name, c.phone, h.duration as cost
from customer c join history h on c.phone = h.incoming_phone
select c.name, c.phone, CASE
    WHEN h.duration > 120 THEN 500 + 2*(h.duration-120)
    ELSE 2*(h.duration-120)
END; as cost
from customer c join history h on c.phone = h.outgoing_phone
当我运行上述查询时,我得到了
语法错误,如“第1行的错误1109(42S02):字段列表中的未知表“c”

我想加入这两个查询,获得总成本,并将字段显示为name、phone和cost


我仍然需要为特定月份添加一个条件,以限制2015年1月的数据,但我仍然坚持使用这种方法。

错误是由于额外的分号
结束后

听起来您的最终查询将是:

SELECT c.name, 
       c.phone, 
       SUM(CASE WHEN h.direction = 'in' THEN h.duration END) as IncomingCost,
       SUM(CASE WHEN h.direction = 'out' AND h.duration > 120 THEN 500 + 2*(h.duration-120)
            ELSE 2*(h.duration-120)
       END) as OutgoingCost,
       SUM(CASE WHEN h.direction = 'in' THEN h.duration END +
       CASE WHEN h.direction = 'out' AND h.duration > 120 THEN 500 + 2*(h.duration-120)
            ELSE 2*(h.duration-120)
       END) as TotalCost
FROM customer c 
JOIN (SELECT 'out' as directon, duration, dialed_on, outgoing_phone as phone 
      FROM history 
      WHERE YEAR(dialed_on) = 1995
      AND MONTH(dialed_on) = 1
      UNION ALL
      SELECT 'in' as direction, duration, dialed_on, incoming_phone as phone
      FROM history
      WHERE YEAR(dialed_on) = 1995
      AND MONTH(dialed_on) = 1
     ) h ON c.phone = h.phone
GROUP BY c.name,
         c.phone

对于来电费用,我必须加入
incoming\u phone
对于传出费用,我必须加入
outing\u phone
@learner哎哟,忽略了这一点。可能最简单的修复方法是使用
联合
规范化该结构,然后为每个调用方向的总和添加一个额外的条件。如何联合两个查询并计算总成本