2016-11-16 55 views
1

我有下面的查询,我想改变结果的显示方式。我看着使用枢轴,但我无法理解我如何使它工作,并希望得到帮助。更改SELECT结果的布局

的(缩短)的查询:

select 
# total counts 
count(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104) and data1 <= 5,1, null)) as under_5_sec, 
count(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104) and data1 <= 10,1, null)) as under_10_sec, 

# percentage answered of calls within timeframe 
count(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104) and data1 <= 5,1, null))/COUNT(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104, 9106, 9108, 9600, 9602, 9500, 9502, 9800, 9802),1, null)) * 100 as under_5_perct, 
count(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104) and data1 <= 10,1, null))/COUNT(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104, 9106, 9108, 9600, 9602, 9500, 9502, 9800, 9802),1, null)) * 100 as under_10_perct, 

# percentage answered of offered calls 
count(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104) and data1 <= 5,1, null))/COUNT(if(verb in ('ENTERQUEUE') and queue in (9100, 9102, 9104, 9106, 9108, 9600, 9602, 9500, 9502, 9800, 9802),1, null)) * 100 as under_5_offer, 
count(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104) and data1 <= 10,1, null))/COUNT(if(verb in ('ENTERQUEUE') and queue in (9100, 9102, 9104, 9106, 9108, 9600, 9602, 9500, 9502, 9800, 9802),1, null)) * 100 as under_10_offer 

from queue_log 

where partition = 'P001' 
and time_id >= unix_timestamp('2016-10-30') and time_id < unix_timestamp('2016-10-31') 

的结果显示为:

under_5_sec | under_10_sec | under_5_perct | under_10_perct | under_5_offer | under_10_offer 
346   | 353   | 91.7772  | 93.6340   | 87.3737  | 89.1414 

我想以显示数据:

descr  | per_sec | percent | offered 
under_5_sec | 346  | 91.7772 | 87.3737 
under_10_sec| 353  | 93.6340 | 89.1414 

任何建议如何我可以做到这一点?

+0

的可能的复制[MySQL的枢轴表(http://stackoverflow.com/questions/7674786/mysql-pivot-table) – CGritton

回答

1
select 
'under_5_sec' as descr, 
count(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104) and data1 <= 5,1, null)) as per_sec, 
count(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104) and data1 <= 5,1, null))/COUNT(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104, 9106, 9108, 9600, 9602, 9500, 9502, 9800, 9802),1, null)) * 100 as perct, 
count(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104) and data1 <= 5,1, null))/COUNT(if(verb in ('ENTERQUEUE') and queue in (9100, 9102, 9104, 9106, 9108, 9600, 9602, 9500, 9502, 9800, 9802),1, null)) * 100 as offer, 
from queue_log 
where partition = 'P001' 
and time_id >= unix_timestamp('2016-10-30') and time_id < unix_timestamp('2016-10-31') 
UNION 
select 
'under_10_sec' as descr, 
count(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104) and data1 <= 10,1, null)) as per_sec, 
count(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104) and data1 <= 10,1, null))/COUNT(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104, 9106, 9108, 9600, 9602, 9500, 9502, 9800, 9802),1, null)) * 100 as perct, 
count(if(verb in ('COMPLETEAGENT','COMPLETECALLER') and queue in (9100, 9102, 9104) and data1 <= 10,1, null))/COUNT(if(verb in ('ENTERQUEUE') and queue in (9100, 9102, 9104, 9106, 9108, 9600, 9602, 9500, 9502, 9800, 9802),1, null)) * 100 as offer 
from queue_log 
where partition = 'P001' 
and time_id >= unix_timestamp('2016-10-30') and time_id < unix_timestamp('2016-10-31') 
+0

谢谢,这确实给我所期望的结果。像这样使用联合运行查询两次(每个工会)? – Stephen

+0

你需要这种结果的联合。我不知道MySQL的内部。但我认为查询每个记录评估一次,而不是两次。我的意思是表格记录不会与一个接一个的查询进行比较。 –

+0

联盟创建两个数据集,然后“联合”形成一个查询结果。 –