首页 > 解决方案 > 如何使用 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

标签: mysql

解决方案


样品数据库制作。

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


推荐阅读