Mysql where子句中断计算查询
不知是否有人能指出我下面代码中的错误。我有一个mysql查询,它按月显示销售线索,然后计算转换为销售额的百分比。如果我在其中添加where子句,它会打断total列,因为它的输出与Comms列相同Mysql where子句中断计算查询,mysql,Mysql,不知是否有人能指出我下面代码中的错误。我有一个mysql查询,它按月显示销售线索,然后计算转换为销售额的百分比。如果我在其中添加where子句,它会打断total列,因为它的输出与Comms列相同 Select q.*, ROUND(100 * Comms / Total, 2) As Conversion, If(q.Adviser Is Null, 1, 0) As remove From (Select a.ContactFullName As Advise
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%
Total - Comms - Conversion
148 - 148 - 100%
输出WHERE子句
Total - Comms - Conversion
479 - 148 - 30.9%
Total - Comms - Conversion
148 - 148 - 100%
我搞不懂为什么会发生这种事
亲切问候更新: 我重写了你的整个问题:
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
原始答案:
要进行多次计数,您可以这样解决:
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
您好,谢谢您的输入,我确实尝试过,但抛出了一个错误“您的SQL语法有错误;”@gary更新了我的答案,应该是正确的,现在开始工作。@tombom-再次感谢您,使用您的代码示例,如果我更改了comms列的年份,这很好,但是total列和所有月份值保持不变,无论年份如何。如果我输入2012年或2013年,总数是相同的479?再次感谢……非常感谢您宝贵的意见。如果我将“CASE WHEN”添加到现有查询中,它将显示正确的总数,但无论我输入什么年份,它都会显示相同的总数。如果我输入2012或2112,则输出相同-如果我使用第二个建议,则在“字段列表”中抛出“#1054-未知列”b.StatusSubmittedDate”。我试着把线移来移去,但没有成功。再次感谢..你的第一期是指每月的总数?当然,您必须将这些行更改为
SUM(年(b.CaseDate)=2013年,月(b.CaseDate)=1)作为一月,
。关于你的第二个问题-你试过我的答案的最新版本了吗?在外部查询中,我在转换时写下了ROUND(100*Comms/Total,2)
@gary更新了我的答案,重写了你的整个查询。非常感谢你在这方面花费的时间,我在外部查询中尝试了你的答案的最新版本,只是准确地复制到了查询窗口中。它工作得很好,但我被困在总计栏中,不管我查询的是哪一年,它总是显示479。再次感谢..发现了一个小错误,您必须在内部和外部查询中同时添加where子句。请使用重写的查询重试。