如何选择中值? [复制]
Posted
技术标签:
【中文标题】如何选择中值? [复制]【英文标题】:How to select median value? [duplicate] 【发布时间】:2019-02-14 04:54:18 【问题描述】:谁能给我一个提示,如何在 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)。
感谢您关注我的问题!
【问题讨论】:
SELECT AVG(NVL(tax, 0)) from ...
?
@SMA:中位数与均值不同(也称为平均值)。 AVG 给出的是平均值,而不是中位数。
【参考方案1】:
中位数是值
恰好位于奇数数据集的中间。 或偶数数据集中两个中间值的平均值。因此,通过考虑这两种情况,您首先需要的是数据行数。然后,您必须决定(简单情况)是选择中间的值,还是需要两个值的平均值(不要忘记在选择实际值之前应用排序):
我会使用一些“代码”来实现这一点:
伪代码:
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"];
【讨论】:
谢谢,不使用$可以解决这个问题吗? @ЕлисейГорьков 当然,这只是变量声明的一个例子。您应该使用您的编程语言支持的声明。 我使用了你的提示,但我遇到了困难。这是我的查询: 1) SELECT count(user_id) from activity where login_time between '2018-04-12' 和 '2018-04-16'; 2) SELECT tax from activity where login_time between '2018-04-12' and '2018-04-16' order by tax; 3) SELECT AVG(tax) as tax from (select * from activity where login_time between '2018-04-12' and '2018-04-16' order by tax) d;这里有什么问题? @ЕлисейГорьков 很难说,你能用你从每个查询中得到的结果更新你的初始帖子吗?然后我们也许能够弄清楚出了什么问题。LIMIT
部分在这里很重要,因为它决定了从数据库中获取哪些值!以上是关于如何选择中值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章