我有下表:
+-----+------+
| qwe | asdd |
+-----+------+
| a | 3 |
| a | 4 |
| b | 5 |
| b | 6 |
+-----+------+
结果应该是这样的:
+-----+------+
| qwe | asdd |
+-----+------+
| a | 12 |
| b | 30 |
+-----+------+
我编写的代码可能只适用于实际的表,但如果我们添加一行或更多行,则效果不佳:
select qwe, (SUM(asd) - MIN(asd)) * MIN(asd) a from t
group by qwe
您如何建议我修改此代码以使其与此类表格一起正常工作?
+-----+------+
| qwe | asdd |
+-----+------+
| a | 3 |
| b | 4 |
| b | 5 |
| a | 6 |
| a | 7 |
+-----+------+
得到这样的表:
+-----+------+
| qwe | asdd |
+-----+------+
| a | 12 |
| b | 126 |
+-----+------+
答案 0 :(得分:3)
没有内置PRODUCT()
功能。唉。
假设您的所有值都是正值,您可以执行以下操作:
select qwe, exp(sum(log(asdd))) as aggregate_product
from t
group by qwe;
注意:这可以扩展为处理0和负值。这只会在表达式中添加许多额外的东西,这隐藏了基本的逻辑。
为了防止零问题:
select qwe, coalesce(exp(sum(log(nullif(asdd, 0)))), 0) as aggregate_product
负数有点棘手。