【问题标题】:Questions on this Query to get the MEDIAN value on a set of values有关此查询的问题,以获取一组值的 MEDIAN 值
【发布时间】:2018-04-05 23:35:53
【问题描述】:

我正在尝试理解我在此博客 (https://sqlperformance.com/2012/08/t-sql-queries/median) 上找到的以下查询。

我已在查询的每个语句下方添加了问题。 有人可以帮帮我吗?

DECLARE @c BIGINT = (SELECT COUNT(*) FROM [dbo].[Items_per_Order]) 

GO


SELECT AVG(1.0 * [total_de_itens]) AS MEDIAN FROM

(
    SELECT [total_de_itens] FROM [dbo].[Items_per_Order]

    ORDER BY [total_de_itens]


OFFSET (@c - 1) / 2 ROWS 

这是为了得到正好一半之前的第一个值,对吧?

FETCH NEXT 1 + (1 - @c % 2) ROWS ONLY 

有人能解释一下这个 1 + (1 - @c % 2) 等式吗?我也没有在那里使用 % 。

奇数行的方程应该是什么?

) 作为 x

这个“AS x”的目的是什么?

【问题讨论】:

    标签: sql median


    【解决方案1】:

    使用percentile_cont()percentile_disc()更方便:

    select top (1) percentile_cont(0.5) within group (order by x) over ()
    from (values (1), (1), (2), (3), (4)) v(x)
    

    【讨论】:

    • 是的,问题是我使用的这个查询获得中位数的效率要高得多(正如上面的链接所解释的那样),但那里没有得到很好的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多