我注意到,如果您尝试在同一查询上获取中位数和聚合函数,MariaDB 会搞乱中位数计算
我创建了一个简单的例子来测试我的理论
CREATE TABLE `test` (
`a` int(11) DEFAULT NULL,
`pk` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `test` (`a`, `pk`) VALUES
(1, 18),
(2, 19),
(3, 20),
(2, 21);
所以任何有基本统计概念的人都会得出这样的结论
中位数 a = 2
这些就是我这样做的结果
SELECT
median(a) over (),
FROM
test;
然而
如果我尝试将中位数与任何聚合函数一起计算,结果始终是 1
所以,例如:
SELECT
sum(a),
median(a) over ()
FROM
test;
结果将是: 8 1
这会发生在任何聚合函数上,sum、max、min、avg...
结果总是一个...
对此有解释吗?有没有办法让它在 1 个查询中工作?
您还需要在窗口函数中使用
SUM()
。
SELECT
SUM(a) OVER (),
MEDIAN(a) OVER ()
FROM
test
LIMIT 1;
由于您没有在窗口中进行分区,因此您将获得表中每一行的结果。我添加了
LIMIT 1
以防止所有这些重复。