在SQL中完成Excel中PRODUCT()功能

Excel中的PRODUCT函数将所有以参数形式给出的数字相乘,并返回乘积值。我在计算用户生存率的时候遇到了一个问题。

(具体计算方法见博客另一篇)

如下图

 G列为每个用户任期的风险率,生存率为所有(1-风险率)的乘积,每一个后续的生存率等于上一个生存率值*(1减上一个风险率)。

在Excel中可以使用PRODUCT,首先计算每一任期的生存率(1-风险率),并且通过 '$26' 固定第一个单元格,完成 '累乘' 。列的某一行数据的计算,基于该列的前一行数据,这种类型的公式被成为递归公式。列方向上的一行行计算。

 

 

 

 

 

可惜SQL中没有PRODUCT()聚合函数,使用对数:自然对数之和等于对数字做成绩
SELECT EXP(SUM(LN(1 - h)))

这个表达式求增量生存率的log值的和,然后反向计算log,这是一种迂回但是高效的计算集合乘积的方法。
e^(LN(1-h0)+LN(1-h1)+……+LN(1-hn)) = e^(LN(1期生存率*2期生存率*……*n期生存率) = 1期生存率*2期生存率*……*n期生存率

这个计算公式是一个简单化的公式,因为所有的风险率并非都非负且小于1.常见的聚合乘积要考虑正负数以及0
逻辑:

SELECT (1 - 2 * MOD(SUM(CASE WHEN col < 0 THEN 1 ELSE 0 END), 2)) *
             MIN(CASE WHEN col = 0 THEN 0 ELSE 1 END) * 
             SUM(EXP(LN(ABS(CASE WHEN col = 0 THEN 1 ELSE col END))))

第一个表达式处理结果标识,计算小于0的数值的个数,如果计数结果为偶数,输出1,如果为奇数,结果为-1
第二个表达式处理0值,如果为0,那么结果为0。
第三个表达式实际处理乘积运算,添加很多处理,防止LN()报错,ABS确保正数,CASE确保不为0。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python的pandas和字符串格式化库来实现利用Excel的配置信息生成复杂SQL语句。 以下是一个简单的例子,使用Python和Excel生成一个复杂的SQL语句: 1. 首先,我们需要在Excel准备好配置信息。在一个Sheet,我们可以定义多个查询条件,每个查询条件包含了查询的表名、列名、操作符和值等信息。例如: | 表名 | 列名 | 操作符 | 值 | | ------- | ------------ | ------ | ------ | | sales | date | >= | 2020-1 | | sales | region | = | east | | product | category | IN | (1,2) | | product | price | < | 100 | 2. 然后,我们可以使用pandas库读取Excel文件,并将其转换成一个DataFrame对象: ```python import pandas as pd # 读取Excel文件 df = pd.read_excel('query.xlsx', sheet_name='query_conditions') print(df) ``` 3. 接下来,我们可以使用字符串格式化库根据DataFrame的查询条件生成SQL语句: ```python # 生成SQL语句 sql_template = 'SELECT * FROM {table} WHERE {condition}' conditions = [] for index, row in df.iterrows(): table_name = row['表名'] column_name = row['列名'] operator = row['操作符'] value = row['值'] if operator == 'IN': value = f"({value})" elif isinstance(value, str): value = f"'{value}'" condition = f"{column_name} {operator} {value}" conditions.append(condition) conditions_str = ' AND '.join(conditions) sql = sql_template.format(table=table_name, condition=conditions_str) print(sql) ``` 在这个例子,首先使用pandas库读取Excel文件的查询条件,并将其转换成一个DataFrame对象。然后,使用字符串格式化库根据DataFrame的查询条件生成SQL语句。在生成SQL语句的过程,我们需要根据不同的操作符对值进行格式化,例如对于IN操作符的值需要加上括号,对于字符串类型的值需要加上单引号等等。最后,输出生成的SQL语句。 在实际情况,你需要根据具体的查询需求和Excel文件格式进行调整和修改。同时,你还需要考虑如何将生成的SQL语句传递给数据库进行查询和执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值