簡體   English   中英

沒有加載帶有左外連接的MySQL Query

[英]MySQL Query with left outer join doesn't load

我想用LEFT OUTER JOIN從多個表生成一個大表,但看起來服務器在我得到結果之前就超時了。 難道我做錯了什么?

SELECT
    mtl_extended_info.TM,
    mtl_extended_info.EMP_ID,
    mtl_extended_info.DNAME,
    mtl_extended_info.STATUS,
    mtl_extended_info.SHIFT,
    mtl_extended_info.SKILL,
    IFNULL(cdl_metrics_all.Sched_Adh, '-') as Sched_Adh,
    IFNULL(cdl_metrics_all.Sched_Compl, '-') as Sched_Compl,
    IFNULL(SUM(enterprise_rep_agent_stats.Calls_Handled_Ct), '-') as Call_Handled,
    IFNULL(ROUND((SUM(enterprise_rep_agent_stats.I_Talk_Time_Sec) + SUM(enterprise_rep_agent_stats.Hold_Time_Sec) + SUM(enterprise_rep_agent_stats.I_Work_Time_Sec) + SUM(enterprise_rep_agent_stats.I_AUX_Out_Time_Sec)) / SUM(enterprise_rep_agent_stats.Calls_Handled_Ct)), '-') as AHT,
    IFNULL(cdl_metrics_all.AHT_Target, '-') as AHT_Target,
    IFNULL(ROUND(SUM(enterprise_rep_agent_stats.I_Talk_Time_Sec) / SUM(enterprise_rep_agent_stats.Calls_Handled_Ct)), '-') as TALK,
    IFNULL(ROUND(SUM(enterprise_rep_agent_stats.I_Work_Time_Sec) / SUM(enterprise_rep_agent_stats.Calls_Handled_Ct)), '-') as ACW,
    IFNULL(ROUND(SUM(enterprise_rep_agent_stats.Hold_Time_Sec) / SUM(enterprise_rep_agent_stats.Calls_Handled_Ct)), '-') as Hold,
    IFNULL(SUM(cdl_rr7_all.Score), '-') as R7,
    IFNULL(cdl_deact_all.Deact_Rate_Excl_Port, '-') AS DeactWOPort,
    IFNULL(cdl_deact_all.Deact_Rate_Incl_Port, '-') AS DeactPort,
    IFNULL(cdl_deact_all.Deac_Target, '-') as Deact_Target,
    IFNULL(TRUNCATE((SUM(cdl_cmp_oe_all.CMP_OE_Virtual) / SUM(cdl_cmp_oe_all.CMP_Surveys)), 2), '-') AS CMP_OE,
    IFNULL(SUM(cdl_cmp_oe_all.CMP_Surveys), '-') AS CMP_Surveys,
    IFNULL(cdl_metrics_all.ICV_WR, '-') as ICV_WR,
    IFNULL(cdl_metrics_all.ICV_WR_Target, '-') as ICV_WR_Target,
    IFNULL(cdl_metrics_all.ICV_CA, '-') as ICV_CA,
    IFNULL(cdl_metrics_all.ICV_CA_Target, '-') as ICV_CA_Target
FROM mtl_extended_info
    LEFT OUTER JOIN enterprise_rep_agent_stats ON enterprise_rep_agent_stats.Employee_ID = mtl_extended_info.EMP_ID
    LEFT OUTER JOIN cdl_metrics_all ON cdl_metrics_all.EMP_ID = mtl_extended_info.EMP_ID
    LEFT OUTER JOIN cdl_rr7_all ON cdl_rr7_all.EMP_ID = mtl_extended_info.EMP_ID
    LEFT OUTER JOIN cdl_deact_all ON cdl_deact_all.EMP_ID = mtl_extended_info.EMP_ID
    LEFT OUTER JOIN cdl_cmp_oe_all ON cdl_cmp_oe_all.EMP_ID = mtl_extended_info.EMP_ID
WHERE VISIBLE = 1
GROUP BY mtl_extended_info.EMP_ID, enterprise_rep_agent_stats.Month_Date
ORDER BY SM, TM

預期結果(這只是我期待的300行中的一行):

TM          |   EMP_ID  |   DNAME       |   STATUS  |   mtl_extended_info.SHIFT |   mtl_extended_info.SKILL |   Sched_Adh   |   Sched_Compl |   Call_Handled    |   AHT |   AHT_Target  |   TALK    |   ACW |   Hold    |   R7  |   DeactWOPort |   DeactPort   |   Deact_Target    |   CMP_OE  |   CMP_Surveys |   ICV_WR  |   ICV_WR_Target   |   ICV_CA  |   ICV_CA_Target
Peter Pan   |   841255  |   John Doe    |   Active  |   Full Time               |   Cable Repair            |   90%         |   95%         |   641             |   954 |   800         |   641     |   83  |   56      |   86% |   73%         |   74%         |   Deact_Target    |   100%    |   14          |   86      |   1.4             |   -14.87  |   -12.4

我收到以下錯誤:錯誤代碼:1317。查詢執行被中斷

作為一個起點,嘗試這樣的事情。 肯定會有語法錯誤。 每個表都可以從emp_id (或month_date, employee_id )上的索引中受益

Select
    ei.TM,
    ei.emp_id,
    ei.DNAME,
    ei.STATUS,
    ei.SHIFT,
    ei.SKILL,
    ifnull(cm.Sched_Adh, '-') as Sched_Adh,
    ifnull(cm.Sched_Compl, '-') as Sched_Compl,
    ifnull(es.Call_Handled_Ct, '-') as Call_Handled,
    ifnull(es.AHT, '-') as AHT,
    ifnull(cm.AHT_Target, '-') as AHT_Target,
    ifnull(es.TALK, '-') as TALK,
    ifnull(es.ACW, '-') as ACW,
    ifnull(es.Hold, '-') as Hold,
    ifnull(cr.R7, '-') as R7,
    ifnull(cd.Deact_Rate_Excl_Port, '-') AS DeactWOPort,
    ifnull(cd.Deact_Rate_Incl_Port, '-') AS DeactPort,
    ifnull(cd.Deac_Target, '-') as Deact_Target,
    ifnull(cc.CMP_OE, '-') AS CMP_OE,
    ifnull(cc.CMP_Surveys, '-') AS CMP_Surveys,
    ifnull(cm.ICV_WR, '-') as ICV_WR,
    ifnull(cm.ICV_WR_Target, '-') as ICV_WR_Target,
    ifnull(cm.ICV_CA, '-') as ICV_CA,
    ifnull(cm.ICV_CA_Target, '-') as ICV_CA_Target
From
    mtl_extended_info ei
    Left Outer Join cdl_metrics_all cm on cm.emp_id = ei.emp_id
    Left Outer Join cdl_deact_all cd on cd.emp_id = ei.emp_id
    Left Outer Join (
        Select
            es.Employee_ID,
            es.Month_Date
            sum(es.Calls_Handled_Ct) as Call_Handled,
            round((sum(es.I_Talk_Time_Sec) + sum(es.Hold_Time_Sec) + sum(es.I_Work_Time_Sec) + sum(es.I_AUX_Out_Time_Sec)) / sum(es.Calls_Handled_Ct)) as AHT,
            round(sum(es.I_Talk_Time_Sec) / sum(es.Calls_Handled_Ct)) as TALK,
            round(sum(es.I_Work_Time_Sec) / sum(es.Calls_Handled_Ct)) as ACW,
            round(sum(es.Hold_Time_Sec) / sum(es.Calls_Handled_Ct)) as Hold
        From
            enterprise_rep_agent_stats es 
        Where
            es.Month_Date = $dynamic_value$
        Group By
            es.Employee_ID
    ) es on es.Employee_ID = ei.emp_id
    Left Outer Join (
        Select
            cr.emp_id,
            sum(cr.Score) as R7
        From
            cdl_rr7_all cr
        Group By
            cr.emp_id
    ) cr on cr.emp_id = ei.emp_id
    Left Outer Join (
        Select
            cc.emp_id,
            truncate((sum(cc.CMP_OE_Virtual) / sum(cc.CMP_Surveys)), 2) as CMP_OE,
            sum(cc.CMP_Surveys) as CMP_Surveys
        From
            cdl_cmp_oe_all cc
        Group By
            cc.emp_id
    ) cc on cc.emp_id = ei.emp_id
Where
    ei.Visible = 1
Order By
    ei.SM,
    ei.TM

還有一些問題。 R7的示例數據產生一個百分比,但計算的工作方式看起來很可疑。 您之前的示例將多次計算多項內容,我認為這是錯誤的,並將每個組拆分為一個單獨的子查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM