When using the APPROX_PERCENTILE_DISC() function in SQL Server, you may get an error that reads “The function ‘APPROX_PERCENTILE_DISC’ must have a WITHIN GROUP clause“. If you get this error, it’s because you omitted the WITHIN GROUP clause when using the APPROX_PERCENTILE_DISC() function.
To fix this issue, make sure you include the WITHIN GROUP clause whenever you use the APPROX_PERCENTILE_DISC() function.
Example of Error
Here’s an example of code that results in the error:
SELECT APPROX_PERCENTILE_DISC( 0.8 )
FROM Products;
Result:
Msg 10754, Level 15, State 2, Server dc69fbeceae9, Line 31 The function 'APPROX_PERCENTILE_DISC' must have a WITHIN GROUP clause.
This error occurred because I omitted the WITHIN GROUP clause.
Solution
To fix this problem, simply include the WITHIN GROUP clause when using the APPROX_PERCENTILE_DISC() function:
SELECT
APPROX_PERCENTILE_DISC( 0.8 )
WITHIN GROUP ( ORDER BY ProductPrice )
FROM Products;
Result:
33.4900
As expected, this resolved the issue.
I should also mention that the WITHIN GROUP clause requires an ORDER BY clause with exactly one ORDER BY expression. If we provide more ORDER BY expressions (or less), we’ll get a different error.