【问题标题】:Using PERCENTILE_DISC with Aggregate functions将 PERCENTILE_DISC 与聚合函数一起使用
【发布时间】:2017-06-05 18:46:18
【问题描述】:

我正在尝试将PERCENTILE_DISC 与许多其他内置聚合函数一起使用。我正在尝试的代码是这样的,但它失败了:

SELECT
    [DataPoint] AS [DataPoint],
    MIN([Value]) AS [Value MIN],
    MAX([Value]) AS [Value MAX],
    AVG([Value]) AS [Value AVG],
    PERCENTILE_DISC(0.5)
        WITHIN GROUP 
        (ORDER BY [Value])
        OVER 
        (PARTITION BY [DataPoint])
        AS MedianCont
    FROM [Table] AS [Table]
    WHERE ([DataPoint]
        IN (
            ...
        )
    )
    GROUP BY [DataPoint]

所以这行得通...

SELECT
    Distinct [DataPoint],
    PERCENTILE_DISC(0.5)
    WITHIN GROUP 
    (ORDER BY [Value])
    OVER 
    (PARTITION BY [DataPoint])
    AS MedianCont
    FROM [Table] AS [Table]
    WHERE ([DataPoint]
        IN (
            ...
        )
    )

这行得通...

SELECT
    [DataPoint] AS [DataPoint],
    MIN([Value]) AS [Value MIN],
    MAX([Value]) AS [Value MAX],
    AVG([Value]) AS [Value AVG]
    FROM [Table] AS [Table]
    WHERE ([DataPoint]
        IN (
            ...
        )
    )
    GROUP BY [DataPoint]

但是当我尝试组合它们时,它希望我在 Group By 子句中声明 Value,这是我不想要的,因为我想要一个不同的 DataPoint 列表,而不是每个 @987654328 的值@。

Column 'Value' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

【问题讨论】:

    标签: sql-server aggregate-functions


    【解决方案1】:

    似乎使用over clause,从而创建了一个“窗口函数”,将聚合函数与选择语句分开。

    SELECT
        Distinct [DataPoint],
        MIN([Value]) OVER (PARTITION BY [DataPoint]) AS [Value MIN],
        MAX([Value]) OVER (PARTITION BY [DataPoint]) AS [Value MAX],
        AVG([Value]) OVER (PARTITION BY [DataPoint]) AS [Value AVG],
        PERCENTILE_DISC(0.5)
            WITHIN GROUP 
            (ORDER BY [Value])
            OVER 
            (PARTITION BY [DataPoint])
            AS MedianCont
        FROM [Table] AS [Table]
        WHERE ([DataPoint]
            IN (
                ...
            )
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 2022-12-15
      • 2020-08-13
      • 1970-01-01
      • 2021-08-19
      相关资源
      最近更新 更多