0

誰かが以下の私のコードのエラーを指摘できるかどうか疑問に思っています. 月ごとに販売リードを表示し、販売に変換されたものの割合を計算するmysqlクエリがあります。これに where 句を追加すると、Comms 列と同じものを出力するため、合計列が壊れますか?

  Select
  q.*,
  ROUND(100 * Comms / Total, 2) As Conversion,
  If(q.Adviser Is Null, 1, 0) As remove
From
  (Select
      a.ContactFullName As Adviser,
      SUM(YEAR(b.CaseDate) = 2013 AND Month(b.CaseDate) = 1) AS Jan,
      SUM(YEAR(b.CaseDate) = 2013 AND Month(b.CaseDate) = 2) As Feb,
      SUM(YEAR(b.CaseDate) = 2013 AND Month(b.CaseDate) = 3) As Mar,
      SUM(YEAR(b.CaseDate) = 2013 AND Month(b.CaseDate) = 4) As Apr,
      SUM(YEAR(b.CaseDate) = 2013 AND Month(b.CaseDate) = 5) As May,
      SUM(YEAR(b.CaseDate) = 2013 AND Month(b.CaseDate) = 6) As Jun,
      SUM(YEAR(b.CaseDate) = 2013 AND Month(b.CaseDate) = 7) As Jul,
      SUM(YEAR(b.CaseDate) = 2013 AND Month(b.CaseDate) = 8) As Aug,
      SUM(YEAR(b.CaseDate) = 2013 AND Month(b.CaseDate) = 9) As Sep,
      SUM(YEAR(b.CaseDate) = 2013 AND Month(b.CaseDate) = 10) As Oct,
      SUM(YEAR(b.CaseDate) = 2013 AND Month(b.CaseDate) = 11) As Nov,
      SUM(YEAR(b.CaseDate) = 2013 AND Month(b.CaseDate) = 12) As Dece,
      Count(b.CaseID) As Total,
      Sum(Case When Year(b.StatusSubmittedDate) = 2013 Then 1 Else 0
      End) As Comms

    From
      tblcontacts a Inner Join

WHERE 句がないと出力されます。

Total - Comms - Conversion
479   -  148  - 30.9%

WHERE 句を使用すると出力されます。

Total - Comms - Conversion
148   -  148  - 100%

なぜこれが起こったのか分かりませんか?

敬具

4

1 に答える 1

1

アップデート:

クエリ全体を書き直しました:

Select
  q.*,
  totals.total,
  ROUND(100 * Comms / totals.total, 2) As Conversion
  If(q.Adviser Is Null, 1, 0) As remove
From
  (Select
      a.ContactFullName As Adviser,
      Sum(Month(b.CaseDate) = 1) As Jan,
      Sum(Month(b.CaseDate) = 2) As Feb,
      Sum(Month(b.CaseDate) = 3) As Mar,
      Sum(Month(b.CaseDate) = 4) As Apr,
      Sum(Month(b.CaseDate) = 5) As May,
      Sum(Month(b.CaseDate) = 6) As Jun,
      Sum(Month(b.CaseDate) = 7) As Jul,
      Sum(Month(b.CaseDate) = 8) As Aug,
      Sum(Month(b.CaseDate) = 9) As Sep,
      Sum(Month(b.CaseDate) = 10) As Oct,
      Sum(Month(b.CaseDate) = 11) As Nov,
      Sum(Month(b.CaseDate) = 12) As Dece,
      Count(b.StatusSubmittedDate) As Comms

    From
      tblcontacts a Inner Join
      tblcases b On a.ContactID = b.ContactAssignedTo 
      WHERE Year(b.StatusSubmittedDate) = 2013
    Group By
      a.ContactFullName With Rollup) q
    inner join (select  a.ContactFullName As Adviser, count(*) as total from
    tblcontacts a Inner Join
      tblcases b On a.ContactID = b.ContactAssignedTo 
      WHERE Year(b.StatusSubmittedDate) = 2013
      group by Adviser
      )totals on q.Adviser = totals.Adviser

元の答え:

複数の COUNTS を使用するには、次のように回避できます。

      Count(b.CaseID) As Total,
      SUM(CASE WHEN YEAR(b.StatusSubmittedDate) = 2013 THEN 1 ELSE 0 END) As Comms,

でもこれは:

      ROUND(100 * Count(b.StatusSubmittedDate) / Count(b.CaseID),

この計算は後で行う必要があるため、機能しません。

Select
  q.*,
  ROUND(100 * Comms / Total, 2) As Conversion,
  If(q.Adviser Is Null, 1, 0) As remove
From
  (Select
      a.ContactFullName As Adviser,
      Sum(Month(b.CaseDate) = 1 and year(b.CaseDate) = 2012) As Jan,
      ... Dec,
      Count(b.CaseID) As Total,
      SUM(CASE WHEN YEAR(b.StatusSubmittedDate) = 2013 THEN 1 ELSE 0 END) As Comms
    From
      tblcontacts a Inner Join
      tblcases b On a.ContactID = b.ContactAssignedTo 
    Group By
      a.ContactFullName With Rollup) q
于 2013-01-21T11:02:10.733 に答える