我有一张桌子,我保持呼叫中心的查询,请参阅下表
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 :(得分: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分组。