1.基本思路
Oracle、MySQL等数据库中只有sum、max、min等函数用于做某列数据聚合,而没有办法直接计算某列数据的乘积,所以需要另想办法。
根据数学对数的加法原理,可对该列中所有数据取对数,后sum再做指数运算,即可得出所需结果。
- 该做法最大的好处是利用数据库预置函数,效率相对较高
- 该思路亦可应用到其他语言
2.对数加法原理

以下实验基于MySQL
3.查询结果代码
SELECT
a.empno
-- 取自然数e的对数
, EXP(SUM(LN(score))) log_e
-- 取10的对数
, POWER(10, SUM(LOG(10,score))) log_10
FROM emp a
GROUP BY a.empno;

4.准备数据代码
-- 建表
CREATE TABLE emp (
empno VARCHAR(10) NULL DEFAULT NULL,
score DECIMAL(20,4) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
;
-- 写入数据
INSERT INTO emp VALUES ('a',1);
INSERT INTO emp VALUES ('a',2);
INSERT INTO emp VALUES ('a',3);
INSERT INTO emp VALUES ('a',4);
INSERT INTO emp VALUES ('b',5);
INSERT INTO emp VALUES ('b',6);
INSERT INTO emp VALUES ('b',7);
INSERT INTO emp VALUES ('b',8);
COMMIT;
本文介绍了一种在Oracle、MySQL等数据库中计算某列数据乘积的方法,通过利用对数加法原理,先对数据取对数,再进行sum运算,最后进行指数运算,从而高效地得到乘积结果。
1745

被折叠的 条评论
为什么被折叠?



