Sql 在我的生活中,我无法理解这个价值“意味着什么”,它应该传达什么信息?对于价格或任何其他类型的价值,这一点的实际应用是什么?请启发我。对于我来说,这实际上不是为了价格,而是为了获得收益率的产品(数量输出/数量输入)。@Marjannema让我来到这里的用例:
Sql 在我的生活中,我无法理解这个价值“意味着什么”,它应该传达什么信息?对于价格或任何其他类型的价值,这一点的实际应用是什么?请启发我。对于我来说,这实际上不是为了价格,而是为了获得收益率的产品(数量输出/数量输入)。@Marjannema让我来到这里的用例:,sql,aggregate,Sql,Aggregate,在我的生活中,我无法理解这个价值“意味着什么”,它应该传达什么信息?对于价格或任何其他类型的价值,这一点的实际应用是什么?请启发我。对于我来说,这实际上不是为了价格,而是为了获得收益率的产品(数量输出/数量输入)。@Marjannema让我来到这里的用例:表risk和risk\u preventioneevry risk有一个损坏值代表处于风险中的金额。每个risk\u prevention都有一个risk\u乘数>0,exp(sum(log(var1))是var始终为正时的乘积(var1)。“
在我的生活中,我无法理解这个价值“意味着什么”,它应该传达什么信息?对于价格或任何其他类型的价值,这一点的实际应用是什么?请启发我。对于我来说,这实际上不是为了价格,而是为了获得收益率的产品(数量输出/数量输入)。@Marjannema让我来到这里的用例:表
risk
和risk\u prevention
eevry risk有一个损坏值
代表处于风险中的金额。每个risk\u prevention
都有一个risk\u乘数
>0,exp(sum(log(var1))是var始终为正时的乘积(var1)。“这只是数学和对数上的聚合:)log(a*b*c...*n)=log(a)+log(b)+log(c).+log(n)
快速问题。要使其工作,日志和电源函数必须使用相同的基址,对吗?但是LOG和EXP不在同一个基数上运行:LOG是base 10,而EXP是base e。因此正确的答案是使用LN代替LOG,或者使用10^ABSMult代替EXP(ABSMult)。对吗?在SQL Server中,有LOG(base e)和LOG10(base 10)。裸日志函数现在有一个可选的基本参数。确认了!我们的问题是,我们在SQL Server中使用了您的代码,然后将其移植到Teradata,其中LOG()以10为基数。显然,我们的计算毫无理由地突然中断了。我很确定我见过LOG是base 2的语言(不一定是SQL)。因为这个问题被标记为通用SQL,所以我们的主要任务是检查目标实现中日志函数的行为,如果没有得到预期的结果。顺便说一句,这是一个绝妙的想法和实施方案+1“SQL标准中没有产品集函数。不过,它似乎是一个很有价值的候选者”-几何平均值函数也是如此。不幸的是,这个答案是完全错误的。exp(sum(log(column)))适用于正数,或者可以看到下面更好的答案。标记,地理平均值是:exp(avg(log(x)))典故是:当已经有办法做某事时,叫嚣会被静音。无论如何,sql的传统重点是会计而不是数据科学。如果要计算整列值的乘积,请添加round()。有时.9999。。。这是非常聪明的T-SQL,select-exp(sum(log(table.price))
Connor McDonald在他的文章中提到了这个答案。还提到了另一种解决方案(XML、model子句),并从性能视图进行了分析。我完全同意Connor的观点,最有效的方法是在Oracle环境中使用自定义聚合函数。
SELECT
Exp(Sum(IIf(Abs([Num])=0,0,Log(Abs([Num])))))*IIf(Min(Abs([Num]))=0,0,1)*(1-2*(Sum(IIf([Num]>=0,0,1)) Mod 2)) AS P
FROM
Table1
select exp (sum (ln (table.price))) from table ...
SELECT
GrpID,
CASE
WHEN MinVal = 0 THEN 0
WHEN Neg % 2 = 1 THEN -1 * EXP(ABSMult)
ELSE EXP(ABSMult)
END
FROM
(
SELECT
GrpID,
--log of +ve row values
SUM(LOG(ABS(NULLIF(Value, 0)))) AS ABSMult,
--count of -ve values. Even = +ve result.
SUM(SIGN(CASE WHEN Value < 0 THEN 1 ELSE 0 END)) AS Neg,
--anything * zero = zero
MIN(ABS(Value)) AS MinVal
FROM
Mytable
GROUP BY
GrpID
) foo
declare @Floats as table (value float)
insert into @Floats values (0.9)
insert into @Floats values (0.9)
insert into @Floats values (0.9)
declare @multiplier float = null
select
@multiplier = isnull(@multiplier, '1') * value
from @Floats
select @multiplier
with recursive t(c) as (
select unnest(array[2,5,7,8])
), r(c,n) as (
select t.c, row_number() over () from t
), p(c,n) as (
select c, n from r where n = 1
union all
select r.c * p.c, r.n from p join r on p.n + 1 = r.n
)
select c from p where n = (select max(n) from p);
with recursive t(sale,price) as (
select 'multiplication', 2 union
select 'multiplication', 5 union
select 'multiplication', 7 union
select 'multiplication', 8 union
select 'trivial', 1 union
select 'trivial', 8 union
select 'negatives work', -2 union
select 'negatives work', -3 union
select 'negatives work', -5 union
select 'look ma, zero works too!', 1 union
select 'look ma, zero works too!', 0 union
select 'look ma, zero works too!', 2
), r(sale,price,n,maxn) as (
select t.sale, t.price, row_number() over (partition by sale), count(1) over (partition by sale)
from t
), p(sale,price,n,maxn) as (
select sale, price, n, maxn
from r where n = 1
union all
select p.sale, r.price * p.price, r.n, r.maxn
from p
join r on p.sale = r.sale and p.n + 1 = r.n
)
select sale, price
from p
where n = maxn
order by sale;
sale,price
"look ma, zero works too!",0
multiplication,560
negatives work,-30
trivial,8
with recursive t(c) as (
select unnest(array[2,5,7,8])
), p(a) as (
select array_agg(c) from t
union all
select p.a[2:]
from p
cross join generate_series(1, p.a[1])
)
select count(*) from p where cardinality(a) = 0;