表 Mariadb 上的 MEDIAN() window 函数

MEDIAN() window function on stable Maria DB

我需要执行 MEDIAN 计算作为查询的一部分。我的开发人员告诉我 Maria DB 10.3.3 可以做到这一点,但我的服务器管理员告诉我他们只能升级到 10.3.2,因为这是最新的稳定版本。我看到 10.3.3 已于 2017 年 12 月 23 日发布,它怎么仍然只是测试版?

无论如何,使用某种 MEDIAN 功能的最佳选择是什么?做子查询既丑又慢又消耗更多CPU.

您可以使用 window 函数。对于数值:

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);

对于字符串或者日期,插值比较难,所以我简单推荐一下:

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);

您可以查看 MariaDB downloads page 的最新稳定版本(当前为 10.4.11)。使用原生 median()-function 会比自己计算更快。