java如何计算中位数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何计算中位数相关的知识,希望对你有一定的参考价值。

参考技术A 就是先排序,然后确定数组长度
根据长度,确定数组下标,就可以
把数据取出来了。2个数据要求平均数

如何计算 Google BigQuery 中多列的中位数?

【中文标题】如何计算 Google BigQuery 中多列的中位数?【英文标题】:How to calculate median over multiple columns in Google BigQuery? 【发布时间】:2019-04-23 03:42:33 【问题描述】:

我正在创建一个查询来计算每天来自两个不同网站的访问中位数。

输出应如下所示:

+------------+---------+---------------+
|    date    | website | median_visits |
+------------+---------+---------------+
| 2019-04-01 | A       | median_value  |
| 2019-04-01 | B       | median_value  |
| 2019-04-02 | A       | median_value  |
| 2019-04-02 | B       | median_value  |
| 2019-04-03 | A       | median_value  |
| 2019-04-03 | B       | median_value  |
+------------+---------+---------------+

这是我的表(有 20,000 行)的样子:

+------------+---------+--------+
|    date    | website | visits |
+------------+---------+--------+
| 2019-04-01 | A       |   10.0 |
| 2019-04-01 | B       |   14.0 |
| 2019-04-02 | A       |   85.0 |
| 2019-04-03 | A       |   75.0 |
| 2019-04-02 | B       |    3.0 |
| 2019-04-02 | B       |   45.0 |
| 2019-04-01 | A       |   12.0 |
| 2019-04-03 | A       |   44.0 |
| 2019-04-01 | A       |   99.0 |
+------------+---------+--------+

查询所需输出的最有效方法是什么?我目前正在使用:

SELECT DISTINCT date, website, median_visits
FROM
 (SELECT  date, website, PERCENTILE_CONT(visits, 0.5) 
  OVER(PARTITION BY date, website) AS median_visits
  FROM table)

【问题讨论】:

除了当前查询中缺少的 group by 之外,输出有什么问题?您在寻找什么解决方法,或者这是关于效率的一般性问题? 你的方法很好,语法正确。 @TamirKlein - 我认为在 OP 的当前查询中不需要明确的 GROUP BY,因为它已经通过 DISTINCT 隐式存在(这是 select 语句中所有字段的 GROUP BY) @TamirKlein 是的,这是关于效率的,因为我需要在更大的范围内使用它。感谢您的回答 【参考方案1】:

以下是 BigQuery 标准 SQL - 我不能说它是最好的。我什至不能保证它会更好——但根据我的测试,我看到了更好的执行计划和插槽使用情况。所以,你可以试试看你的数据

#standardSQL
SELECT date, website, 
  (SELECT PERCENTILE_CONT(visit, 0.5) OVER() 
    FROM UNNEST(visits) visit LIMIT 1
  ) AS median_visits
FROM (
  SELECT date, website, ARRAY_AGG(visits) visits
  FROM `project.dataset.table`
  GROUP BY date, website
)

【讨论】:

还找到了一个similar question 与中位数计算和与之相关的性能。

以上是关于java如何计算中位数的主要内容,如果未能解决你的问题,请参考以下文章

Java:计算 java.util.BitSet 中设置的位数

JAVA怎么计算txt中一个1亿个浮点数的中位数?

java如何获取一个double的小数位数

java 自定义一个整数,计算它是几位数?

如何计算 DataFrame 中的移动中位数?

如何计算奇数个数据中位数,举例说明