Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将相同PKs的值相乘_Sql_Sql Server - Fatal编程技术网

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)作为总计;