sql-server - 如何在部分百分比的 SELECT 语句中避免 SELECT COUNT
问题描述
我想在这里计算每个 SiteName 的部分百分比,但我需要计算我的行的总计数。
以下查询有效,但有没有办法在不使用 SELECT 语句中的 SELECT 或为此声明变量的情况下执行此操作?我只有读取权限,所以我不能声明变量。
SELECT
ServiceSiteName
, COUNT(*) AS [Alarms Resolved]
-- How can I avoid this.
, (SELECT COUNT(1) FROM [C1Datastore].[dbo].[Fct_AlertCRM_Incident]
WHERE Conditions A, B, C) AS [Total Count]
, COUNT(*) / (SELECT COUNT(1) FROM [C1Datastore].[dbo].[Fct_AlertCRM_Incident]
WHERE Conditions A, B, C) AS [% Count]
FROM TableX
WHERE Conditions A, B, C
GROUP BY
ServiceSiteName
ORDER BY [Alarms Resolved] DESC
解决方案
关键是使用 SUM(COUNT()) OVER (PARTITION BY) 这要短得多。
SELECT
ServiceSiteName
, COUNT(*) AS [Alarms Resolved]
-- Use this
, SUM(COUNT(1)) OVER (PARTITION BY ServiceSiteName) AS [TOTAL]
, COUNT(*) / SUM(COUNT(1)) OVER (PARTITION BY ServiceSiteName) AS [% Count]
FROM TableX
WHERE Conditions A, B, C
GROUP BY
ServiceSiteName
ORDER BY [Alarms Resolved] DESC
推荐阅读
- wpf - 绑定到 TabControl 的 ContentTemplate 内的元素
- visual-studio - SSRS - 在页面顶部重复 tablix
- javafx - 如何确定我的 JavaFX 应用程序所需的 FXML 文件、CSS 文件、图像和其他资源的正确路径?
- r - 如何使用 ifelse 添加日期
- r - 如何在 R 中创建面板数据的多方面图?
- octave - Octave - 更改同一图中不同图的颜色
- c# - Azure 函数中的 switch 表达式导致异常
- r - 删除 data.table 中多余的 colname
- javascript - 如何为 Node JS 设置 REST API
- c# - 如何解析 XML Blob 并关联来自同级节点的数据?