Mysql 获取客户呼叫的总成本
我有两张表=客户和他们的通话记录 现在,我想根据通话持续时间对他们收费,具体的月份也一样,比如2015年1月 以下是计算通话费用的标准: A) 对于来电,收费为每秒1个单位<代码>示例如果持续时间为250秒,则成本为250 B) 对于拨出的电话,Mysql 获取客户呼叫的总成本,mysql,sql,Mysql,Sql,我有两张表=客户和他们的通话记录 现在,我想根据通话持续时间对他们收费,具体的月份也一样,比如2015年1月 以下是计算通话费用的标准: A) 对于来电,收费为每秒1个单位示例如果持续时间为250秒,则成本为250 B) 对于拨出的电话,前两分钟的费用固定为500个单位。对于随后的几秒钟,成本为2个单位/秒 例如,如果输出持续时间为5分钟,则成本为500个单位+2*3*60个单位=860个单位 下表如下: 包含id、姓名、电话等列的客户表 历史记录表,包括列id、传入电话、传出电话、持续时间、已
前两分钟的费用固定为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哎哟,忽略了这一点。可能最简单的修复方法是使用联合
规范化该结构,然后为每个调用方向的总和添加一个额外的条件。如何联合两个查询并计算总成本