Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取未索引表中位数的有效方法_Mysql - Fatal编程技术网

Mysql 获取未索引表中位数的有效方法

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指定为所选每个薪资的增量索引,并对薪资进行排

我试图在这张表中找到工资中位数

是否有像AVG这样的聚合函数可以有效地在未索引的表中查找中位数?谢谢

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)