Sql 我如何将一个案例的总数除以总总数
我有一个代码,它在…时按案例分解计数,但是我需要第三列,它在计数时取案例的结果,然后除以原始总数 我该怎么做呢 代码如下 基本上我需要 每组交易数/交易总数Sql 我如何将一个案例的总数除以总总数,sql,sql-server,case-when,Sql,Sql Server,Case When,我有一个代码,它在…时按案例分解计数,但是我需要第三列,它在计数时取案例的结果,然后除以原始总数 我该怎么做呢 代码如下 基本上我需要 每组交易数/交易总数 Select case when t_opportunity.opportunityID=yes.opportunityID then 'Compliant' else 'Non Compliant' end as Compliance, count(t_o
Select case when t_opportunity.opportunityID=yes.opportunityID
then 'Compliant'
else 'Non Compliant'
end as Compliance,
count(t_opportunity.opportunityID) as NumberOfDeals
from T_opportunity
left join (select t_O.opportunityId
from t_opportunity T_O
inner join T_quote on T_O.opportunityID=t_quote.OpportunityId
where t_quote.createddate<=(T_O.applicationsigneddate+7)
group by t_O.opportunityID
having count(t_quote.quoteID)>=3) yes
on T_opportunity.opportunityID=yes.opportunityID
group by case when t_opportunity.opportunityID=yes.opportunityID
then 'Compliant'
else 'Non Compliant'
end
提前谢谢你 如果我理解正确的话,这可能是你的窍门。不过,样本数据和预期结果对于数据转换问题总是有帮助的 这假设如果一个opportunity在yes中有多个匹配项,您希望它计数两次或N次。如果不是这样的话,就把一个独特的
SELECT compliance,
COUNT(1) AS NumberOfDeals,
COUNT(1)/Total_Count AS FieldYouAreAskingFor -- Cast accordingly to get precision.
FROM (SELECT o.opportunityID, -- Shove distinct here. Or better rewrite as EXIST if you only want to count multiple matches once.
CASE WHEN yes.opportunityID IS NOT NULL THEN 'COMPLIANT'
ELSE 'NOT COMPLIANT'
END AS Compliance,
SUM(1) OVER() AS Total_Count
FROM T_OPPORTUNITY O
LEFT
JOIN (select t_O.opportunityId
from t_opportunity T_O
inner join T_quote on T_O.opportunityID=t_quote.OpportunityId
where t_quote.createddate<=(T_O.applicationsigneddate+7)
group by t_O.opportunityID
having count(t_quote.quoteID)>=3
) yes
ON o.opportunityID = yes.opportunityID
) TMP
GROUP
BY TMP.Compliance,
TMP.Total_Count;
我将推测您打算:
select (case when t_opportunity.opportunityID = yes.opportunityID
then 'Compliant'
else 'Non Compliant'
end) as Compliance,
count(t_opportunity.opportunityID) as NumberOfDeals,
count(t_opportunity.opportunityID) * 1.0 / sum(count(t_opportunity.opportunityID)) over () as Ratio
这使用了一个窗口函数来计算行的总数。如果我没有弄错,那么您的Opportunity在一周内创建了至少3个引号,那么您的Opportunity是符合要求的,无论这意味着什么,我想您会理解这一点 您可以在一个查询中计算符合性:
SELECT o.opportunityID,
CASE
WHEN COUNT(q.quoteID) >= 3
THEN 'Compliant'
ELSE 'Not Compliant'
END AS Compliance
FROM T_opportunity o
LEFT OUTER JOIN t_quote q
ON o.opportunityID = q.OpportunityId
AND DATEADD(day, 7, o.applicationsigneddate) >= q.createddate
GROUP BY o.opportunityID
在下一步中,您可以使用此结果作为按法规遵从性分组的输入:
欢迎来到堆栈溢出!请阅读并阅读,特别是如何提问。你在这里的最佳选择是做你的研究,搜索相关的话题,然后尝试一下。在做了更多的研究和搜索之后,发布一篇你的尝试的文章,并明确指出你的困境,这可以帮助你得到更好的答案。当前的查询有什么问题?向我们显示数据库模式、示例数据、当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。样本数据和期望的结果将非常有用。您的大小写表达式正在返回字符串。我看不出这是如何合理地除以任何总数的。这个老问题的状态如何?如果一个人解决了这个问题,这个问题应该通过接受答案来标记。
WITH
OpportunityCompliance (opportunityID, Complicance) AS (
SELECT o.opportunityID,
CASE
WHEN COUNT(q.quoteID) >= 3
THEN 'Compliant'
ELSE 'Not Compliant'
END
FROM T_opportunity o
LEFT OUTER JOIN t_quote q
ON o.opportunityID = q.OpportunityId
AND DATEADD(day, 7, o.applicationsigneddate) >= q.createddate
GROUP BY o.opportunityID
)
SELECT
Complicance,
COUNT(*) AS NumberOfDeals,
1.0 * COUNT(*) / SUM(COUNT(*)) OVER () AS Ratio
FROM OpportunityCompliance
GROUP BY Complicance