4

他のテーブルなどのデータに基づいて多くの不要なレコードを除外する、パフォーマンスの高いクエリがあります。

列を平均化し、各平均グループの数も返します。これはすべて正常に機能しています。

ただし、TOTAL カウントのパーセンテージも含めたいと思います。

クエリ全体を再実行したり、パフォーマンスの負荷を大幅に増加させたりせずに、この合計数を取得する方法はありますか?

また、サブクエリを完全に再構築する必要がない場合 (たとえば、サブクエリの外で合計カウントを取得するなど) を希望しますが、必要に応じて再構築することもできます。

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
4

2 に答える 2

7

ウィンドウ関数を参照してください。

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

編集:実際に数字を割るのを忘れていました。

于 2012-07-27T11:47:52.850 に答える
1

別のアプローチ:

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
于 2012-07-27T12:19:27.933 に答える