MariaDB 使用聚合函数时会弄乱中位数

问题描述 投票:0回答:1

我注意到,如果您尝试在同一查询上获取中位数和聚合函数,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 个查询中工作?

sql mysql mariadb median
1个回答
0
投票

您还需要在窗口函数中使用

SUM()

SELECT
    SUM(a) OVER (),
    MEDIAN(a) OVER ()   
FROM
    test
LIMIT 1;

由于您没有在窗口中进行分区,因此您将获得表中每一行的结果。我添加了

LIMIT 1
以防止所有这些重复。

© www.soinside.com 2019 - 2024. All rights reserved.