在这件事上我的头撞到了墙上:
SELECT
vicidial_closer_log.CAMPAIGN_I,
vicidial_closer_log.USER_GROUP,
vicidial_closer_log.LEAD_ID,
SUM(IF(PHONE_CODE = '1', 1,0)) AS 'Call_Count',
SUM(IF(STATUS = 'DROP', 1, 0)) AS 'DROPS',
SUM(IF(STATUS = 'AFTHRS',1,0)) AS 'After Hours'
FROM
vicidial_closer_log
group by vicidial_closer_log.CAMPAIGN_I
;
我需要计算掉线率,基本上将掉线分为调用次数。关于如何实现这一目标有什么想法吗?
最佳答案
只需进行除法即可:
SELECT vcl.CAMPAIGN_I, vcl.USER_GROUP, vcl.LEAD_ID,
SUM(PHONE_CODE = '1') AS Call_Count,
SUM(STATUS = 'DROP') AS DROPS,
SUM(STATUS = 'AFTHRS') AS AfterHours,
(SUM(STATUS = 'DROP') / NULLIF(SUM(PHONE_CODE = '1'), 0)) AS DropRate
FROM vicidial_closer_log vcl
GROUP BY vcl.CAMPAIGN_I;
注释:
- 表别名 (
vcl
) 使查询更易于编写和阅读。 - 在 MySQL 中,您不需要
if()
来进行计数;您可以只使用 bool 表达式。 - 不要对列别名使用单引号。最好选择不需要转义的名称。如果这样做,请使用反引号。
- 您可以使用
NULLIF()
处理被零除。
关于mysql - 计算使用 IF 语句和别名的 2 个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35952842/