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