在MySql中替换DROP或CREATE

时间:2016-05-02 12:06:06

标签: mysql sql

我有以下查询,直到昨天工作正常...但由于xyz原因DROP和CREATE访问已从ID撤销....所以有任何方法在MySql中执行以下查询:

DROP TABLE IF EXISTS temp;
CREATE TEMPORARY TABLE temp
(
call_start_date_time DATE,
cust_ph_no INT(11),
actual_repeat_calls INT(11),
total_calls INT(11),
INDEX(call_start_date_time));

INSERT IGNORE INTO temp(call_start_date_time,cust_ph_no,actual_repeat_calls,total_calls) 
(SELECT DATE(call_start_date_time),cust_ph_no,count(*)-1 as actual_repeat_calls,count(*) as total_calls 
FROM call_data 
WHERE DATE(call_start_date_time) = '2016-04-30' 
AND campaign_name = 'VT' 
AND report_id = '-2' 
AND call_status_disposition NOT LIKE 'ST' 
AND campaign_type = 'ID' 
GROUP BY DATE(call_start_date_time),cust_ph_no);

SELECT call_start_date_time,(SUM(actual_repeat_calls)/SUM(total_calls)) 
as 
repeat_ratio 
FROM temp 
GROUP BY call_start_date_time;

2 个答案:

答案 0 :(得分:0)

要创建临时表,您必须具有CREATE TEMPORARY TABLES权限。

一个简单的替代方法是简单地从表中删除所有行:

delete from temp;

或使用TRUNCATE:

truncate table temp;

但它并不完全相同(临时表是每个会话,更多会话可以使用相同的临时表名而不会发生冲突)。

答案 1 :(得分:0)

select  s.*,sum(s.actual_repeat_calls) / sum(s.total_calls) as repeat_ratio
from
(
SELECT  DATE(call_start_date_time) as startdatetime,cust_ph_no,count(*)-1 as actual_repeat_calls,count(*) as total_calls 
FROM    call_data 
WHERE    DATE(call_start_date_time) = '2016-04-30' 
AND     campaign_name = 'VT' 
AND     report_id = '-2' 
AND     call_status_disposition NOT LIKE 'ST' 
AND     campaign_type = 'ID' 
GROUP BY DATE(call_start_date_time) ,cust_ph_no
) s

按s.startdatetime分组;