,我有以下的表格:聚合多组序功能
1 X 10
2 X 30
3 Y 5
4 Y 2
...etc
我需要把它变成:
X 300 //(10 * 30)
Y 10 //(5 * 2)
所以我实际上是在寻找一种乘法函数的那我可以使用像sum,avg和东西......这是否存在球员?
例如:
select field2, **multiply**(field3)
from t
group by field2
感谢
,我有以下的表格:聚合多组序功能
1 X 10
2 X 30
3 Y 5
4 Y 2
...etc
我需要把它变成:
X 300 //(10 * 30)
Y 10 //(5 * 2)
所以我实际上是在寻找一种乘法函数的那我可以使用像sum,avg和东西......这是否存在球员?
例如:
select field2, **multiply**(field3)
from t
group by field2
感谢
理想的情况下,访问SQL将有一个PRODUCT
聚合函数可用,但事实并非如此。但是,我们可以通过记住我们了解学校对数(或不...),并记住它模拟的是原木和的反对数等于产品:
SELECT field2, EXP(Sum(LOG(Field3))) AS ProductOfField3
FROM t
GROUP BY Field2
注意,而一个真正的PRODUCT
功能只会针对一组返回0
如果有任何零个值,该解决方案将失败如果有任何零个值,所以,要当心一点。另外,如果有任何负值,这种方法将不起作用。
为了解决零,我们可以这样做:
SELECT
field2,
EXP(Sum(LOG(IIf(Field3 = 0, 1, Field3)))) AS ProductOfField3,
MIN(ABS(Field3)) AS MinOfAbsField3
FROM t
GROUP BY Field2
,然后不顾任何行,其中MinOfAbsField3
为零ProductOfField3
值(这表明含零一组,因此,“真正的”产品应被0
)
为了应对负值,我们可以进一步做到这一点:
SELECT
field2,
EXP(Sum(LOG(IIf(Field3 = 0, 1, ABS(Field3))))) AS ProductOfField3,
MIN(ABS(Field3)) AS MinOfAbsField3,
SUM(IIf(Field3 < 0, 1, 0)) AS SumOfNegativeIndicator
FROM t
GROUP BY Field2
和解释中等的结果与这些规则:
MinOfAbsField3
为零,无视ProductOfField3
该行 - 该产品是零ProductOfField3
,否定如果SumOfNegativeIndicator
是奇数该行中Public Function ResetProd() As Boolean
Call Prod(Null)
ResetProd = True
End Function
Public Function Prod(nNumber As Variant) As Double
Static nPrevNumber As Double
If IsNull(nNumber) Then
nPrevNumber = 1
Else
nPrevNumber = nPrevNumber * nNumber
End If
Prod = nPrevNumber
End Function
...并使用它们如下:
SELECT PROD(_column_for_wich_you_want_product_) FROM _your_table_
WHERE RESETPROD()
这在理论上看起来不错,但你真的尝试过吗?它并不适合我(某些行不止一次),主要是:它不会聚合。你不能使用GROUP BY。 – Andre 2017-04-01 14:36:23
谢谢AakashM。我尝试了这种方式,但它不起作用,它一直说“无效的过程调用”,我无法确定错误来自哪里。虽然我确信它不是来自我的查询的其余部分,似乎访问不喜欢EXP(Sum(LOG([X])))或其他。我最终使用了一个交叉表,因为我最多只有3列进行乘法运算,但我会将其留作未来需求。 – CoolStraw 2011-03-07 12:43:07
@CoolStraw这是你将得到的错误,如果任何值为零(或负值)。我将更新以指示处理这种情况的一种方式 – AakashM 2011-03-07 12:55:14
gotcha!谢谢 – CoolStraw 2011-03-07 13:11:54