我想出来了
n=1;
curAvg = 0;
loop{
curAvg = curAvg + (newNum - curAvg)/n;
n++;
}
Run Code Online (Sandbox Code Playgroud)
我认为这种方式的亮点是:
- 它避免了大数字(如果你总和然后除以可能溢出)
- 你保存一个寄存器(不需要存储总和)
问题可能在于求和误差 - 但我认为通常会有平衡的向上和向下舍入数,因此误差不会大大加总.
你看到这个解决方案有任何陷阱吗?你有更好的建议吗?
SELECT avg(duration)as average FROM login
;
持续时间的数据类型是"time",因此我的值如:00:00:14,00:20:23等
我执行它给我的查询:2725.78947368421
那是什么?我想要时间格式,可以mysql做平均时间??
例:
$a[] = '56';
$a[] = '66';
$a[] = '';
$a[] = '58';
$a[] = '85';
$a[] = '';
$a[] = '';
$a[] = '76';
$a[] = '';
$a[] = '57';
Run Code Online (Sandbox Code Playgroud)
实际上如何从这个数组中找出不包括空的平均值.请帮忙解决这个问题.
SELECT AVG(variable) AS Expr1, SUM(variable) AS Expr2
FROM ......
Run Code Online (Sandbox Code Playgroud)
AVG的结果是2,但事实并非如此,必须是2.95.有什么问题,有什么想法吗?
假设我们有两个寄存器长度为 2有符号1 的整数,例如a
和b
。我们想要计算值(a + b) / 2
,向上舍入、向下舍入、向零舍入或远离零舍入,无论哪种方式更容易(即我们不关心舍入方向)。
结果是另一个寄存器长度有符号整数(很明显,平均值必须在寄存器长度有符号整数的范围内)。
\n执行此计算最快的方法是什么?
\n您可以选择两个整数最初位于哪个寄存器中,以及平均值最终位于哪个寄存器中。
\n脚注1:对于无符号整数,我们可以用两条指令来完成。尽管循环进位在 Intel CPU 上超过 1 uop,但这可能是最快的方法。但当计数仅为 1 时,只有一对。 关于无符号均值的问答中的答案讨论了效率。
\nadd rdi, rsi\nrcr rdi, 1\n
Run Code Online (Sandbox Code Playgroud)\nrdi
这两个数字以和开始rsi
,平均值以 结束rdi
。但对于有符号数,-1 + 3
将设置 CF,并将 a 旋转1
到符号位。没有给出正确答案+1
。
脚注 2:我指定了寄存器长度的有符号整数,这样我们就不能简单地用movsxd
orcdqe
指令对整数进行符号扩展。
我得到的最接近的解决方案使用四个指令,其中一个rcr
在 Intel 上为 3 uops,在 AMD …
我想与Python解决方案共享这个特定的Apache Spark,因为它的文档很差.
我想用KEY计算K/V对(存储在Pairwise RDD中)的平均值.以下是示例数据的样子:
>>> rdd1.take(10) # Show a small sample.
[(u'2013-10-09', 7.60117302052786),
(u'2013-10-10', 9.322709163346612),
(u'2013-10-10', 28.264462809917358),
(u'2013-10-07', 9.664429530201343),
(u'2013-10-07', 12.461538461538463),
(u'2013-10-09', 20.76923076923077),
(u'2013-10-08', 11.842105263157894),
(u'2013-10-13', 32.32514177693762),
(u'2013-10-13', 26.249999999999996),
(u'2013-10-13', 10.693069306930692)]
Run Code Online (Sandbox Code Playgroud)
现在,下面的代码序列不是最佳的方法,但它确实有效.在我找到更好的解决方案之前,我正在做的事情.这并不可怕但是 - 正如你在答案部分看到的那样 - 有一种更简洁,有效的方式.
>>> import operator
>>> countsByKey = sc.broadcast(rdd1.countByKey()) # SAMPLE OUTPUT of countsByKey.value: {u'2013-09-09': 215, u'2013-09-08': 69, ... snip ...}
>>> rdd1 = rdd1.reduceByKey(operator.add) # Calculate the numerators (i.e. the SUMs).
>>> rdd1 = rdd1.map(lambda x: (x[0], x[1]/countsByKey.value[x[0]])) # Divide each SUM by …
Run Code Online (Sandbox Code Playgroud) 在我的一个查询中,似乎该AVG
函数返回一个int.
select ..., AVG(e.employee_level)avg_level
Run Code Online (Sandbox Code Playgroud)
如何让它返回浮点值?我尝试了它,但我的所有行avg_level
仍然是整数.
我试图获得最低5个价格项目的平均值,按附加的用户名分组.但是,下面的查询给出了每个用户的平均价格(当然这是价格),但我只想回复一个答案.
SELECT AVG(price)
FROM table
WHERE price > '0' && item_id = '$id'
GROUP BY username
ORDER BY price ASC
LIMIT 5
Run Code Online (Sandbox Code Playgroud) 我有以下SQL :( bitemp)
SELECT COUNT (*) AS Count
FROM Table T
WHERE (T.Update_time =
(SELECT MAX (B.Update_time )
FROM Table B
WHERE (B.Id = T.Id))
GROUP BY T.Grouping
Run Code Online (Sandbox Code Playgroud)
现在我得到一个有很多数字的结果集.我想得到这份清单的平均值.目前,我将列表导入excel并使用其平均功能.但是DB2有一个AVG函数,但我没有让它工作.
我SELECT AVG(COUNT(*))
也试过了SELECT AVG(*) FROM (theQuery)
.
我的Postgresql 9.1数据库中有以下表格:
select * from ro;
date | shop_id | amount
-----------+----------+--------
2013-02-07 | 1001 | 3
2013-01-31 | 1001 | 2
2013-01-24 | 1001 | 1
2013-01-17 | 1001 | 5
2013-02-10 | 1001 | 10
2013-02-03 | 1001 | 4
2012-12-27 | 1001 | 6
2012-12-20 | 1001 | 8
2012-12-13 | 1001 | 4
2012-12-06 | 1001 | 3
2012-10-29 | 1001 | 3
Run Code Online (Sandbox Code Playgroud)
我试图得到一个移动平均线,比较过去3个星期四的数据而不包括当前的星期四.这是我的查询:
select date, shop_id, amount, extract(dow from date),
avg(amount) OVER (PARTITION BY extract(dow …
Run Code Online (Sandbox Code Playgroud)