SQL查询以查找同一列中值的乘积

标签 sql database oracle

之前问过的面试问题。

给定一个包含列 boxName 和 value 的表格,找出每个盒子的体积。 值字段具有立方体的长度、宽度和高度。我需要乘以所有树的维度。

如果需要计算总和,我可以使用groupby,但这里需要乘积

box1 = 12*13*1  = 156
box2 = 1*23*6   = 138
box3 = 12*1*20  = 240

+---------+-------+
| boxName | value |
+---------+-------+
| box1    |    12 |
| box1    |    13 |
| box1    |     3 |
| box2    |     1 |
| box2    |    23 |
| box2    |     6 |
| box3    |    12 |
| box3    |     1 |
| box4    |    30 |
+---------+-------+

最佳答案

试试这个

select EXP(SUM(LN(value))) As Product_val ,boxName
from yourTable
Group by boxName

注意: value <= 0 LOG 将失败。

当你的值 <= 0 时使用它。

SELECT
    boxName,
    CASE
       WHEN MinVal = 0 THEN 0
       WHEN Neg % 2 = 1 THEN -1 * EXP(ABSMult)
       ELSE EXP(ABSMult)
    END
FROM
    (
    SELECT
       boxName, 
       --log of +ve row values
       SUM(LN(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
       yourTable
    GROUP BY
       boxName
    ) foo

引用自此answer

关于SQL查询以查找同一列中值的乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34455363/

相关文章:

php - 我想在循环外使用变量,但在 while 循环中定义变量

database - 将值存储在数据库中或对它们进行硬编码

oracle - 在 pl/sql 代码中调用 TO_DATE 时要注意什么确切的异常

mysql - Oracle 数据库上的 Rails 的表名长度超过 30 个字符,Globalize 找不到我的表

php - 在自动填充的 PHP 表之间放置文本

sql - 更新给定值的 Oracle XMLType 列内容

python - pyspark.sql.function可以在udf中使用吗?

mysql - 在 SQL 查询中将 dd/mm/yyyy 转换为 DATETIME

c# - 为一张表中的嵌套数据创建简化查询 (.NET Core)

MYSQL 子句错误