如何选择中值?

时间:2018-09-09 15:53:15

标签: mysql sql database join select

有人可以给我一个提示,如何在12.04.18-16.04.18中找到“税”的中值:

user_id  login_time  tax
3       2018-04-15   16625000
5       2018-04-16      
6       2018-04-17   296470000
6       2018-04-16   192519750
6       2018-04-15   4455500
6       2018-04-13   17125
6       2018-04-12   120180000
7       2018-04-18   24060000
7       2018-04-17   42959500

结果等于16625000(因为存在NULL值。我们需要将其用作0)。

感谢您关注我的问题!

1 个答案:

答案 0 :(得分:0)

中位数是值

  • 恰好位于奇数数据集的中间。
  • 或偶数数据集中两个中间值的平均值。

因此,考虑到这两种情况,首先需要了解数据行的数量。然后,您必须决定(简单的情况)是在中间选择一个值,还是需要两个值的平均值(别忘了在选择实际值之前应用排序):

我将使用一些“代码”来实现:

伪代码:

1.) SELECT count(id) AS val FROM myTable WHERE datetime ... //$val=9
2.) Programming language: $lim = floor($val/2); // $lim=4

if odd($val){
  3.) SELECT tax FROM myTable WHERE datetime [...] ORDER BY tax LIMIT $lim,1 
}

else if even($val){
  3.) Programming language: $lim -=1; // if $val was 10, we want row 4 and 5
  4.) SELECT AVG(tax) AS tax FROM 
       (SELECT * FROM myTable WHERE datetime [...] ORDER BY tax LIMIT $lim,2) AS tmp
}
[...]
echo "Median is: ". $row["tax"];