mysql - 如何使用 MySQL 对临时表执行计算?
问题描述
在按周分组后,我试图获得列的平均值。
这是我原来的表
ID | 星期 | 数量 | div |
---|---|---|---|
1 | 5 | 50 | 5 |
2 | 5 | 40 | 3 |
3 | 4 | 35 | 3 |
4 | 4 | 60 | 10 |
5 | 6 | 70 | 9 |
首先,我想按周将它们与 group 相加,然后除以 amount/div
星期 | 数量 | div | 数量/格 |
---|---|---|---|
5 | 90 | 8 | 11.25 |
4 | 95 | 13 | 7.30 |
6 | 70 | 9 | 7.77 |
现在得到数量/div的平均值,即(11.25+7.3+7.77)/3 = 8.77
我只想得到8.77
这是我尝试过的:
SELECT AVG(amount/ div) from mytable GROUP BY week
但我没有得到想要的结果8.77
解决方案
样品数据库制作。
http://sqlfiddle.com/#!9/6c7fa7/9
用于FLOOR
匹配您的值 11.25、7.3、7.77,通常 ROUND(...,2) 相差 1 美分。
CREATE TABLE stats (
id INT PRIMARY KEY AUTO_INCREMENT,
week INT,
amount INT,
divs INT
);
INSERT INTO stats ( week, amount, divs ) VALUES ( 5, 50, 5 );
INSERT INTO stats ( week, amount, divs ) VALUES ( 5, 40, 3 );
INSERT INTO stats ( week, amount, divs ) VALUES ( 4, 35, 3 );
INSERT INTO stats ( week, amount, divs ) VALUES ( 4, 60, 10 );
INSERT INTO stats ( week, amount, divs ) VALUES ( 6, 70, 9 );
SELECT ROUND(AVG(amount_divs), 2)
FROM (
SELECT FLOOR(100* SUM(amount)/SUM(divs))/100 AS amount_divs
FROM stats
GROUP BY week
) x
如果您运行以下查询
SELECT AVG(amount/divs)
FROM stats
它有不同的含义,它是所有记录的平均值(5个值),而不是后面的3个SUM
推荐阅读
- java - 如何为 enitymanager 编写单元测试?
- c++ - 如何在创建新线程的同时停止运行线程并恢复同一个线程?
- javascript - 同一html函数中的可编辑文本和输入字段(Textarea + input)
- firefox-addon-webextensions - 如何在我的 Firefox 扩展的当前选项卡中有一个变量?
- ssis - 简单的例子进入无限循环
- excel - 为什么我的 VBA 代码在运行时会跳过行,但在我单步执行时却没有?==
- javascript - 如何强制我的图例保留在 JS 图表的单列中?
- math - TanH(x) 莫名其妙地变大了 1 和更大的 1 百万
- javascript - 反应错误 - ./src/App.js 第 16 行:解析错误:意外的令牌
- c# - 将 Visual Studio 2017 解决方案从一个 GitHub 帐户移动到新的 Github 帐户时出现的问题