2012-02-29 20 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作爲分隔符將多個值分組。