sql - 在 SQL Server 中获取计数百分比
问题描述
我正在构建一个 SQL Server 查询,该查询按月获取从特定来源生成的潜在客户数量。这是告诉我每月计数的查询。但我想添加一个列,显示该月的这些潜在客户是该月所有潜在客户的总和。我不清楚如何做到这一点。有什么帮助吗?
SELECT FORMAT([ProspectData].[dbo].[Real Estate.KPC.Leads.2018-08-08].[Created Date]
, 'yyyy-MM') AS 'YYYY-MM'
, 'Kiosk-Mall' AS 'Lead Source'
, COUNT(*) AS 'Monthly Total From That Lead Source'
FROM [ProspectData].[dbo].[Real Estate.KPC.Leads.2018-08-08]
WHERE [ProspectData].[dbo].[Real Estate.KPC.Leads.2018-08-08].[Lead Source] =
'Kiosk-Mall'
GROUP BY FORMAT([ProspectData].[dbo].[Real Estate.KPC.Leads.2018-08-08].[Created Date], 'yyyy-MM')
ORDER BY FORMAT([ProspectData].[dbo].[Real Estate.KPC.Leads.2018-08-08].[Created Date], 'yyyy-MM');
解决方案
您可以使用条件聚合 - 基本上将WHERE
条件移动CASE
到聚合函数参数中的表达式:
SELECT FORMAT(l.[Created Date], 'yyyy-MM') AS YYYYMM,
'Kiosk-Mall' AS Lead_Source,
SUM(CASE WHEN l.[Lead Source] = 'Kiosk-Mall' THEN 1 ELSE 0 END) AS [Monthly Total From That Lead Source],
AVG(CASE WHEN l.[Lead Source] = 'Kiosk-Mall' THEN 1.0 ELSE 0 END) AS proportion_of_total
FROM [ProspectData].[dbo].[Real Estate.KPC.Leads.2018-08-08] l
GROUP BY FORMAT(l.[Created Date], 'yyyy-MM')
ORDER BY YYYYMM
笔记:
- 表别名使查询更易于编写和阅读。
- 最好选择不需要转义的列别名(即没有空格,没有标点符号)。
推荐阅读
- statistics - 如何在 SAS 中使用 proc 报表调整发布式报表?
- react-native - React Native:有没有办法通过 ref 向元素添加事件监听器?
- python - python web抓取soup.find给空
- ios - SwiftUI:如何设置时间选择器的范围以包含午夜?
- javascript - 如果字符串带有转义的反斜杠后跟大写字母,则 Javascript JSON.Parse 错误
- c++ - WIN32上的智威汤逊验证
- elasticsearch - 在嵌套查询中过滤聚合
- .net-core - UWP Tiles - AdaptiveImage AlternateText 未显示
- angular - http请求的返回值不符合准备好的角度接口
- typescript - 标准博览会打字稿模板 + SafeAreaProvider/SafeAreaView 是渲染组件两次?