sql中有很多聚合函数,例如 COUNT、SUM、MIN 和 MAX。
但是唯独没有乘法函数,而很多朋友开发中缺需要用到这种函数,今天告诉大家一个不错的解决方案
logx+logy=logx*y
这是我们高中时期学过的对数计算,对数的相加等于指数的相乘,我们利用这个方式转换加法到乘法
实现方式,先对记录取对数log(),然后sum聚合,最后exp,结果就是记录相乘的结果
数据库:
1,客户表:a(id,name,address),字段含义:客户编号,姓名,地址
2,客户登陆日志表: b(id,time),字段含义:客户编号,登陆时间
3,商品表: c(pid,pprice),字段含义:商品编号,商品单价
4,客户购物流水表: d(id,time,pid,productnum),字段含义:客户编号,购物时间,商品编号,商品数量
1,查询姓“赵”的客户最近三天的所有登陆日志
select time from a.name,b.time,d.productnum where a.name like "赵%" and a.id=b.id and b.id=d.id;
2,查询2019年每个客户的购物数量总和
select sum(d.productnum),d.id,a.name from d left join a on d.id=a.id group by d.id ;
3,查询近30天内无购物行为的客户的最近一次登陆时间
select b.time from b,d where d.time > "2020-8-15" and d.productnum is NULL and d.id=b.id;
4,查询最近30天内购物总价排在前10名的客户姓名和各自的最新登陆时间
select a.name,b.time,exp(log(sum(d.productnum))+log(c.pid)) from a,b,d where time > "2020-8-15" group by d.id order by pid;