我有这样的一个表:MySQL的选择查询值
orderno insurance
ABC123 3.00
ABC123 3.00
ABC123 3.00
DEF456 2.00
DEF456 2.00
我想要得到的平均保险值的总和为每个唯一的顺序。
例如(3.00+3.00+3.00)/3 + (2.00+2.00)/2
= 5
我怎样才能做到这一点使用MySQL查询?
我有这样的一个表:MySQL的选择查询值
orderno insurance
ABC123 3.00
ABC123 3.00
ABC123 3.00
DEF456 2.00
DEF456 2.00
我想要得到的平均保险值的总和为每个唯一的顺序。
例如(3.00+3.00+3.00)/3 + (2.00+2.00)/2
= 5
我怎样才能做到这一点使用MySQL查询?
试试这个:
SELECT SUM(avgIns) AS oAverage
FROM
(SELECT OrderNo, AVG(Insurance) AS avgIns
FROM yourTableName
GROUP BY OrderNo) iTable
UPDATE,如果你想限制你的小数位,使用FORMAT
(价值,decimalPlaces)
SELECT FORMAT(SUM(avgIns),2) AS oAverage -- Returns two decimal places
FROM
(SELECT OrderNo, AVG(Insurance) AS avgIns
FROM yourTableName
GROUP BY OrderNo) iTable
select sum(value) from (
select sum(insurance)/count(insurance) as value
from yourTableName
group by insurance
) temp;
实例运行在MySQL:
mysql> create table testTable (id int primary key auto_increment, orderno varchar(12), insurance decimal(6, 2));
Query OK, 0 rows affected (0.27 sec)
mysql> insert into testTable (orderno, insurance) values ('ABC123', 3), ('ABC123', 3), ('ABC123', 3), ('DEF456', 2), ('DEF456', 2);
Query OK, 5 rows affected (0.00 sec) Records: 5 Duplicates: 0 Warnings: 0
mysql> select * from testTable;
+----+---------+-----------+
| id | orderno | insurance |
+----+---------+-----------+
| 1 | ABC123 | 3.00 |
| 2 | ABC123 | 3.00 |
| 3 | ABC123 | 3.00 |
| 4 | DEF456 | 2.00 |
| 5 | DEF456 | 2.00 |
+----+---------+-----------+
5 rows in set (0.00 sec)
mysql> select sum(value) from (
select sum(insurance)/count(insurance) as value
from testTable
group by insurance) temp;
+------------+
| sum(value) |
+------------+
| 5.000000 |
+------------+
1 row in set (0.02 sec)
感谢您的理解,除了iTable之外,我应该怎么做? – Chris 2012-02-15 02:13:44
@chris'iTable'只是子查询的名称。 – 2012-02-15 02:15:49
派生表和别名...明白了! – Chris 2012-02-15 02:15:53