mysql - 如何选择中值?

标签 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.) 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"];

关于mysql - 如何选择中值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52246206/

相关文章:

php - PDO MYSQL 查询格式

sql - 在 Oracle 中交换列值

sql - 使用 max 查找最常出现的 column_name

java - 在 `$objectdb` 主目录之外以嵌入式服务器模式使用数据库

php - 未找到类 'MongoDB\BSON\Regex'

mysql - Joomla 3 模板页面加载速度非常慢

mysql - SQL统计同一类型有多少个男性和女性

sql - 小复杂的sql

python - 我在滥用 flush() 调用吗?

mysql - 查询列中的循环值