Mysql 获取未索引表中位数的有效方法
我试图在这张表中找到工资中位数 是否有像AVG这样的聚合函数可以有效地在未索引的表中查找中位数?谢谢Mysql 获取未索引表中位数的有效方法,mysql,Mysql,我试图在这张表中找到工资中位数 是否有像AVG这样的聚合函数可以有效地在未索引的表中查找中位数?谢谢 id | Salary ----------- 1 300 2 250 7 180 8 150 9 150 10 160 11 180 15 140 MySQL中没有中值函数,但有一种简单的计算方法,如本网站所示: 假设您的表名为salaries: 说明: 让我们从内部子查询开始—子选择将@rowindex指定为所选每个薪资的增量索引,并对薪资进行排
id | Salary
-----------
1 300
2 250
7 180
8 150
9 150
10 160
11 180
15 140
MySQL中没有中值函数,但有一种简单的计算方法,如本网站所示:
假设您的表名为salaries:
说明:
让我们从内部子查询开始—子选择将@rowindex指定为所选每个薪资的增量索引,并对薪资进行排序。
一旦我们获得了已排序的薪资列表,外部查询将获取数组中的中间项。如果数组包含奇数项,则两个值都将是单个中间值。
然后,外部查询的SELECT子句返回这两个值的平均值作为中间值。
在你的情况下,中位数是多少?通过解释显示所需的输出。
SET @rowindex := -1;
SELECT
AVG(salary)
FROM
(SELECT @rowindex:=@rowindex + 1 AS rowindex,
salaries.salary AS salary
FROM salaries
ORDER BY salaries.salary) AS s
WHERE
s.rowindex IN (FLOOR(@rowindex / 2) , CEIL(@rowindex / 2));
select avg(Salary)
from
(
select *,
ROW_NUMBER() over (order by Salary desc) as desc_salary,
ROW_NUMBER() over (order by Salary asc) as asc_salary
from Table_Name
) as a
where asc_salary in (desc_salary,desc_salary+1, desc_salary-1)