I need to perform a MEDIAN calculation as part of a query. My developer told me this is possible with Maria DB 10.3.3 but my server admin told me they can upgrade only to 10.3.2 since that is the latest stable release. I see 10.3.3 was released on 23 Dec 2017, how is it still just a beta?
Anyway, what will be my best options to use some kind of MEDIAN functionality? Making sub-queries will be both ugly, slow and consume more CPU.
You can use window functions. For a numeric value:
select avg(col)
from (select t.*
row_number() over (order by col) as seqnum,
count(*) over () as cnt
from t
) t
where seqnum in ( cnt / 2, (cnt + 1) / 2, (cnt + 2) / 2);
For a string or date, it is harder to use interpolation, so I would simply recommend:
select col
from (select t.*
row_number() over (order by col) as seqnum,
count(*) over () as cnt
from t
) t
where seqnum in ( cnt / 2, (cnt + 1) / 2);