Sql 将相同PKs的值相乘
我有下表:Sql 将相同PKs的值相乘,sql,sql-server,Sql,Sql Server,我有下表: +-----+------+ | qwe | asdd | +-----+------+ | a | 3 | | a | 4 | | b | 5 | | b | 6 | +-----+------+ 结果应该是这样的: +-----+------+ | qwe | asdd | +-----+------+ | a | 12 | | b | 30 | +-----+------+ +-----+------+ | qwe |
+-----+------+
| qwe | asdd |
+-----+------+
| a | 3 |
| a | 4 |
| b | 5 |
| b | 6 |
+-----+------+
结果应该是这样的:
+-----+------+
| qwe | asdd |
+-----+------+
| a | 12 |
| b | 30 |
+-----+------+
+-----+------+
| qwe | asdd |
+-----+------+
| a | 12 |
| b | 126 |
+-----+------+
我编写的代码可能只应用于实际的表,但如果我们添加一行或多行,则无法正常工作:
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 | 30 |
+-----+------+
+-----+------+
| qwe | asdd |
+-----+------+
| a | 12 |
| b | 126 |
+-----+------+
没有内置的
PRODUCT()
函数。唉
假设所有值均为正值,则可以执行以下操作:
select qwe, exp(sum(log(asdd))) as aggregate_product
from t
group by qwe;
注意:这可以扩展到处理0和负值。这只是在表达式中添加了很多额外的内容,隐藏了基本逻辑
要防止zero出现问题,请执行以下操作:
select qwe, coalesce(exp(sum(log(nullif(asdd, 0)))), 0) as aggregate_product
负数有点棘手。没有内置的
PRODUCT()
函数。唉
假设所有值均为正值,则可以执行以下操作:
select qwe, exp(sum(log(asdd))) as aggregate_product
from t
group by qwe;
注意:这可以扩展到处理0和负值。这只是在表达式中添加了很多额外的内容,隐藏了基本逻辑
要防止zero出现问题,请执行以下操作:
select qwe, coalesce(exp(sum(log(nullif(asdd, 0)))), 0) as aggregate_product
负数有点棘手。它的答案可能会帮助你。它的答案可能会帮助你。@StephanLechner。非常感谢。事实上,我测试了这个,只是转录错了。谢谢!我意识到我必须以某种方式使用ifnull,但仍然无法了解如何处理0和负数!按qwe从t组中选择qwe,nullif(exp(sum(log(asd))),0)作为总计@斯蒂芬利纳。非常感谢。事实上,我测试了这个,只是转录错了。谢谢!我意识到我必须以某种方式使用ifnull,但仍然无法了解如何处理0和负数!按qwe从t组中选择qwe,nullif(exp(sum(log(asd))),0)作为总计;