Groups | Search | Server Info | Login | Register


Groups > comp.databases.ms-sqlserver > #2241

Re: Calculating the percentile

From Erland Sommarskog <esquel@sommarskog.se>
Newsgroups comp.databases.ms-sqlserver
Subject Re: Calculating the percentile
Date 2024-03-14 14:55 +0100
Organization Erland Sommarskog
Message-ID <XnsB13597CDC7B36Yazorman@127.0.0.1> (permalink)
References <20240311144248.432ce7f1a182654f52237410@g{oogle}mail.com>

Show all headers | View raw


Anton Shepelev (anton.txt@g{oogle}mail.com) writes:
> I am trying to solve a trivial problem, and my solution
> turns out unexpectedly cumbersome and likeky suboptimal.
> Given a table storing values (val) over dimension (dim), I
> want to query the total, mean and median of the value over
> the dimension.  My solution is:
> 
>   SELECT
>      dim         ,
>      SUM(val) tot,
>      AVG(val) avg,
>      med
>   FROM
>   (  SELECT
>         dim,
>         val,
>         PERCENTILE_CONT( 0.5 )
>         WITHIN GROUP (ORDER BY val)
>         OVER (PARTITION BY dim) AS med
>      FROM #test
>   ) w_med
>   GROUP BY dim, med
> 

If you are on SQL 2022, you can use the new function
APPROXIMATIVE_PERCENTILE_CONT which is a regular aggregate function.
But as the name says, it is approximative. It's intended for large
data sets where exact calculation would take a lot of time. I don't
know how well it works on smaller data sets.

Back to comp.databases.ms-sqlserver | Previous | NextPrevious in thread | Find similar


Thread

Calculating the percentile Anton Shepelev <anton.txt@g{oogle}mail.com> - 2024-03-11 14:42 +0300
  Re: Calculating the percentile Erland Sommarskog <esquel@sommarskog.se> - 2024-03-14 14:55 +0100

csiph-web