数据库某列数据相乘

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值