如何获得计数行的总和

时间:2012-02-29 10:05:42

标签: mysql

我有一张桌子,我保持呼叫中心的查询,请参阅下表


    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 

3 个答案:

答案 0 :(得分:1)

select agent_name, count(*) as callcount
from callcenter
where agent_name = 'lucy'
group by agent_name

答案 1 :(得分: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"

因为所有字段都在分组中或包含在agregate函数中。

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

答案 2 :(得分:-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分组。