【问题标题】:Count, SUM, LEFT JOIN and GROUP BY in query not working right查询中的计数、SUM、LEFT JOIN 和 GROUP BY 无法正常工作
【发布时间】:2014-10-27 15:16:20
【问题描述】:

我已经尝试了一些方法,但我似乎无法找出导致问题的原因。 当我删除 totalHours 部分时,查询工作正常。但有了它,它会显示正确的小时数,但会显示错误的工作、选定和获胜者数量。

谁能告诉我我做错了什么?

提前致谢。

这是我的查询;

SELECT 

    crmCandidate.candidateID, 
    crmCandidate.candidateName, 

    COUNT(DISTINCT crmJoin.joinID) AS Jobs, 

    SUM(IF(crmJoin.joinExtra = 'select', 1, 0)) AS Selected, 
    SUM(IF(crmJoin.joinExtra = 'winner', 1, 0)) AS Winner, 

    ROUND(SUM(crmDays.total)) AS totalDays 

FROM crmCandidate 
LEFT JOIN crmJoin ON (crmJoin.joinChild = crmCandidate.candidateID) 
LEFT JOIN crmJob ON (crmJob.jobID = crmJoin.joinParent) 
LEFT JOIN crmDays ON (crmDays.dayCandidateID = crmJoin.joinChild) 

WHERE 

    crmDays.dayJobID = crmJob.jobID AND 
    crmDays.dayCandidateID = crmCandidate.candidateID 

GROUP BY 
    crmCandidate.candidateID 

ORDER BY DESC 

LIMIT 100

【问题讨论】:

  • crmhours 表连接丢失,示例数据和预期结果也会有所帮助
  • 对不起,你是对的,我已经更新了我的查询。

标签: mysql count group-by sum left-join


【解决方案1】:

试试这个:

SELECT 
    crmCandidate.candidateID, 
    crmCandidate.candidateName, 
    COUNT(DISTINCT crmJoin.joinID) AS Jobs, 
    Sum(Case When crmJoin.joinExtra = 'select' Then 1 else 0 end) as Selected,
    Sum(Case When crmJoin.joinExtra = 'winner' Then 1 else 0 end) as winner,
    ROUND(SUM(crmDays.total)) AS totalDays 
FROM crmCandidate 
LEFT JOIN crmJoin   
    ON crmJoin.joinChild = crmCandidate.candidateID
LEFT JOIN crmJob    
    ON crmJob.jobID = crmJoin.joinParent
Inner JOIN crmDays  
    On  crmDays.dayCandidateID  = crmCandidate.candidateID 
    AND crmDays.dayJobID        = crmJob.jobID
GROUP BY crmCandidate.candidateID, crmCandidate.candidateName
ORDER BY candidateID DESC 
LIMIT 100

【讨论】:

    【解决方案2】:

    最好的办法是在您执行join 之前汇总数据。您可以使用以下count(distinct) 子句做您想做的事:

    COUNT(DISTINCT case when crmJoin.joinExtra = 'select' then crmJoin.JoinId end) AS Selected, 
    COUNT(DISTINCT case when crmJoin.joinExtra = 'winner' then crmJoin.JoinId end) AS Winner, 
    

    【讨论】:

      猜你喜欢
      • 2021-01-30
      • 2015-08-21
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 2013-09-28
      • 2015-04-26
      • 2016-05-01
      • 1970-01-01
      相关资源
      最近更新 更多