【问题标题】:Total Count in Grouped TSQL Query分组 TSQL 查询中的总计数
【发布时间】:2012-07-26 02:08:46
【问题描述】:

我有一个性能繁重的查询,它会根据其他表等中的数据过滤掉许多不需要的记录。

我正在平均一列,并返回每个平均组的计数。这一切都很好。

但是,我还想包括总计数的百分比。

有没有什么方法可以在不重新运行整个查询或显着增加性能负载的情况下获得这个总数?

如果我不需要完全重组子查询(例如,通过在其中获取总计数),我也更愿意,但如有必要也可以这样做。

SELECT 
    data.EquipmentId,
    AVG(MeasureValue) AS AverageValue,
    COUNT(data.*) AS BinCount
    COUNT(data.*)/ ???TotalCount??? AS BinCountPercentage
FROM
(SELECT * FROM MultipleTablesWithJoins) data
GROUP BY data.EquipmentId

【问题讨论】:

    标签: sql sql-server-2008 tsql group-by


    【解决方案1】:

    Window functions

    SELECT 
        data.EquipmentId,
        AVG(MeasureValue) AS AverageValue,
        COUNT(*) AS BinCount,
        COUNT(*)/ cast (cnt as float) AS BinCountPercentage
    FROM
    (SELECT *,
          -- Here is total count of records
            count(*) over() cnt
     FROM MultipleTablesWithJoins) data
    GROUP BY data.EquipmentId, cnt
    

    编辑:忘记实际除数。

    【讨论】:

      【解决方案2】:

      另一种方法:

      with data as
      (
          SELECT * FROM MultipleTablesWithJoins
      )
      ,grand as
      (
          select count(*) as cnt from data
      )
      SELECT 
          data.EquipmentId,
          AVG(MeasureValue) AS AverageValue,
          COUNT(data.*) AS BinCount
          COUNT(data.*)/ grand.cnt AS BinCountPercentage
      FROM data cross join grand
      GROUP BY data.EquipmentId
      

      【讨论】:

      • 这看起来不错,但@Nikola Markovinović 建议的方法更好地插入到我现有的查询中。不过感谢您的建议。
      猜你喜欢
      • 2012-12-31
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多