2013-07-20 96 views
0

我遇到了子查詢和一些分組問題。子查詢從整個表中選擇,而不只是個別羣體的......我的代碼MySQL - 使用子查詢進行分組

SELECT SEC_TO_TIME(TIME_TO_SEC(call_start) - TIME_TO_SEC(call_start)%(30*60)) AS intervals, 
     COUNT(*) AS OFFERED, 
     SUM(agent_duration) AS AGENT_SUM, 
     SUM(TIME_TO_SEC(TIMEDIFF(dequeue_time, enqueue_time))) AS ANS_TIME_SUM, 
     COUNT(DISTINCT agent_username) AS UNIQUE_AGENTS, 
     (SELECT COUNT(*) FROM call_detail 
     WHERE TIME_TO_SEC(TIMEDIFF(dequeue_time, enqueue_time)) < 40) AS SLA, 
     SUM(queue_duration) AS TOTAL_QUEUE_TIME 
FROM call_detail 
WHERE DATE(call_start) = CURDATE() 
GROUP BY intervals 

我的目標是有一個子查詢只返回的記錄數,其中即TIMEDIFF結果小於40中的特定間隔

謝謝。

回答

1

我不認爲你需要這個子查詢。只要做到有條件聚集:

SELECT SEC_TO_TIME(TIME_TO_SEC(call_start) - TIME_TO_SEC(call_start)%(30*60)) AS intervals, 
     COUNT(*) AS OFFERED, 
     SUM(agent_duration) AS AGENT_SUM, 
     SUM(TIME_TO_SEC(TIMEDIFF(dequeue_time, enqueue_time))) AS ANS_TIME_SUM, 
     COUNT(DISTINCT agent_username) AS UNIQUE_AGENTS, 
     sum(case when TIME_TO_SEC(TIMEDIFF(dequeue_time, enqueue_time)) < 40 then 1 else 0 end) as SLA, 
     SUM(queue_duration) AS TOTAL_QUEUE_TIME 
FROM call_detail 
WHERE DATE(call_start) = CURDATE() 
GROUP BY intervals; 

你可以使用子查詢獲得總數超過所有記錄,不會受到where子句或group by的人。

+0

+1我打算髮佈一個答案,它與分組的子查詢連接,另一個解決方案使用相關的子查詢,但我更喜歡這個。 – Barmar

+0

謝謝你們......我會檢查一下併發布我的結果 – CameronS

+0

是的。那樣做了。真的很感謝快速回復。 – CameronS