首页 > 解决方案 > 在 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');

标签: sqlsql-serverssms

解决方案


您可以使用条件聚合 - 基本上将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

笔记:

  • 表别名使查询更易于编写和阅读。
  • 最好选择不需要转义的列别名(即没有空格,没有标点符号)。

推荐阅读