2012-02-29 16 views
0

我有一个表,我一直呼叫中心咨询,请参见下面的如何获得数行


    log_id call_date call_time agent_name agent_id customer_name nature_of_inquiry 
    1  2009-01-13 12:24:01 sam  a1  George  balance inquiry 
    2  2009-01-13 03:01:10 james  a2  Ann   account opening 
    3  2009-02-14 09:24:01 Lucy  a3  Paul   account opening 
    4  2009-02-15 09:50:01 Lucy  a3  Luke   account opening 
    5  2009-02-14 10:24:01 Lucy  a3  jill   account opening 

表的总和我想运行由代理,如果你的查询选择的呼叫数量查询通过代理名称,例如像下面的表格,


    log_id call_date call_time agent_name agent_id customer_name nature_of_inquiry no_of_calls 

    3  2009-02-14 09:24:01 Lucy  a3  Paul   account opening 
    4  2009-02-15 09:50:01 Lucy  a3  Luke   account opening 
    5  2009-02-14 10:24:01 Lucy  a3  jill   account opening  3 

这是目前使用


    SELECT log_id,call_date, call_time, agent_name, agent_id ,customer_name ,nature_of_inquiry, SUM(counted) as no_of_calls 
    FROM (
    (
    SELECT count(*) AS counted, log_id ,call_date, call_time, agent_name agent_id customer_name ,nature_of_inquiry 
    FROM callcenter 
     WHERE agentname = 'lucy' 
     GROUP BY log_id) AS b) 
     GROUP BY agent_name 

+0

你如何在log_id = 5前面显示'3'? – Vikram 2012-02-29 12:08:24

回答

1
select agent_name, count(*) as callcount 
from callcenter 
where agent_name = 'lucy' 
group by agent_name 
查询时
+0

查询不会给出总数 – smilezjim 2012-02-29 11:17:13

+1

请向我显示您需要的输出类型。 – Vikram 2012-02-29 11:20:09

+0

log_id call_date call_time customer_name nature_of_inquiry no_of_calls 3 2009-02-14 09:24:01 Paul开户 4 2009-02-15 09:50:01 Luke开户 5 2009-02-14 10:24:01 jill account opening 3 – smilezjim 2012-02-29 11:51:26

-1

我假设你想知道通话为每一位客户的数量为每个代理

SELECT call_date, agent_name, agent_id ,customer_name , COUNT(customer_name) as no_of_calls 
FROM callcenter 
WHERE agent_name = 'lucy' 
GROUP BY call_date, customer_name 

如果您需要从多个代理显示的数据,那么你按AGENT_NAME,CUSTOMER_NAME。

+2

查看我的帖子为什么你的查询是“无效的”(例如,对于lucy,你认为call_date应该是什么?)。 – mkk 2012-02-29 10:24:43

+0

我不知道为什么查询是错误的,因为没有提及通话日期。不过,如果您需要通过call_date显示总计,我还在call_date上添加了一个额外的GROUP BY。 – 2012-02-29 10:37:57

+0

从第26个字符开始,直到第34个字符。那里写的是什么? – mkk 2012-02-29 20:39:15

0

日志ID是唯一的,所以你不需要按它分组 - 它是毫无意义的。另外,如果你使用group by,你不能在没有聚合函数的情况下取得任何字段(如SUM,MIN等)。其原因如下: 想象一下,你有3行:

log_id call_date call_time agent_name agent_id customer_name nature_of_inquiry no_of_calls 

3  2009-02-14 09:24:01 Lucy  a3  Paul   account opening  4 
4  2009-02-15 09:50:01 Lucy  a3  Luke   account opening  2 
5  2009-02-14 10:24:01 Lucy  a3  jill   account opening  3 

,你输入像

SELECT count(*), agent_name, SUM(no_of_calls), customer_name FROM table group by agent_name where agent_name="Lucy" 

这将是你预期的结果?

显然,在定义什么应该是count(*) - 应该是3.什么应该是agent_name?你分组的人 - 露西。 sum(no_of_calls) - 4 + 2 + 3 = 9没有问题。但是,这里的问题开始了:应该是什么customer_name?!保罗,卢克还是吉尔?你不知道这个。在某些数据库中,如果尝试执行此类查询(例如postgresql),则会出错。在MySQL中,我猜第一个值正在返回(如果我错了,请纠正我)。但这不直观,你应该避免这样的查询。

这就是为什么正确的查询将是:

SELECT count(*), agent_name, SUM(no_of_calls) FROM table group by agent_name where agent_name="Lucy" 

,因为所有字段无论是在group by或包裹在agregate功能。

您的问题可能存在错误,您可能只想询问特定客户的电话。在这种情况下,只需在组中使用customer_name,逻辑保持不变。您可以使用comma作为分隔符将多个值分组。