2
好吧,我正在使用嵌套的SQL语句:SQL计数和分组
我想查询我们的推销员编写的最后120个提案。我使用嵌套查询基于状态得到最后120项建议从系统中,然后再进行筛选,等...
我遇到的问题是如何获取的提案的计数每个推销员?
的SQL显然是错误的,但这里的地方我卡住了。
SELECT
CASE userId
WHEN '4' THEN 'AT'
WHEN '3' THEN 'EO'
WHEN '11' THEN 'CT'
WHEN '13' THEN 'MH'
ELSE userId
END AS Salesman,
SUM(contractAmt) as 'Contract Total',
AVG(DATEDIFF(contractDate, proposalDate)) AS averageDays,
SUM(proposalAmt) as pTot,
Count(*) as Contracts,
Count(A.proposalAmt) as Proposals,
(SUM(contractAmt)/SUM(proposalAmt)) AS 'Hit Rate $s',
(Count(*)/Count(A.proposalAmt)) AS 'Hit Rate #s'
FROM
(/* Get the last 120 proposals not in Lead or Proposal status*/
SELECT contractAmt, proposalAmt, contractDate, status, userId,
CASE WHEN proposalDate = '0000-00-00'
THEN CAST(contractDate as Date)
else CAST(proposalDate as Date)
END as proposalDate
FROM project
WHERE (status != 'proposal' and status != 'lead')
/*GROUP BY id*/
ORDER BY contractDate DESC
LIMIT 0, 120) A
WHERE status = 'contract' or status = 'complete'
GROUP BY userId
“Count(A.proposalAmt)as Proposals”,这给我筛选的记录数。 (仅限合同和已完成的订单)
在嵌套位中,查询不希望返回100个单独记录的单行计数。如果用户id我组,我得到的用户建议的计数,但现在我没有为以后的过滤个人记录。
有几个方法我能想到的解决这个问题,但他们都吸。我可以做另一个查询,但这不够好,对我的输出结果不太好。
数据库是MySql。
的情况下,工作流,我无法正确解释它:
For each user ID
Get the last 100 proposals
Count # of proposals by salesman
Total proposal $ amount by salesman
Count # of contract or complete proposals
Total $ amount of contract and complete jobs
# proposals/# contracts = Hit Rate #'s
$ proposals/$ contracts = Hit Rate $'s
AVERAGE(contract date - proposal date) = Average # days in process
输出应该类似于:
Salesman Avg Days ProposalTot ContractTot HR $'s Prop # Con # HR#'s -------------------------------------------------------------------------------------- EO | 29.27 | $30,000 | $15,000 | 50% | 30 | 15 | 50%
编辑:添加的架构
Table project
=============
id, userId, clientId, contactId, projectName, status, description, creationDate, shipDate, estimateAmt, leadAmt, reestimateAmt, proposalAmt, contractAmt, completeAmt, type, subType, estDate, reestDate, proposalDate, contractDate, completeDate, lostDate, onHoldDate, estShip, reestShip, proposalShip, contractShip, completeShip, casperLink, statusChangeTS
-------------
id int(11) PK
userId int(11)
clientId int(11)
contactId int(11)
projectName varchar(255)
status enum('lead','proposal','contract','complete','onHold','lost')
description text
creationDate date
shipDate date
estimateAmt int(11)
leadAmt int(11)
reestimateAmt int(11)
proposalAmt int(11)
contractAmt int(11)
completeAmt int(11)
type varchar(100)
subType varchar(100)
estDate date
reestDate date
proposalDate date
contractDate date
completeDate date
lostDate date
onHoldDate date
estShip date
reestShip date
proposalShip date
contractShip date
completeShip date
casperLink varchar(20)
statusChangeTS date
提供用于问题复制目的的已用表的模式是否太麻烦了?谢谢。 – hannebaumsaway