sql - 为什么SQL中没有Product聚合函数?

标签 sql aggregate

我正在寻找类似于 SUM 工作方式的 SELECT PRODUCT(table.price) FROM table GROUP BY table.sale 之类的内容。

我是否错过了文档中的某些内容,或者真的没有 PRODUCT 功能?

如果是这样,为什么不呢?

注意:我在postgres、mysql和mssql中查找了该函数,但没有找到,所以我假设所有sql都不支持它。

最佳答案

对于 MSSQL,您可以使用它。它可以用于其他平台:它只是数学和对数的聚合。

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

摘 self 的回答:SQL Server Query - groupwise multiplication

关于sql - 为什么SQL中没有Product聚合函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3912204/

相关文章:

c# - 如何在 MySql 数据库中存储 List<string>

mysql - 需要按类别 - 子类别按总金额检索前 3 位供应商

sql - 在 Oracle 中按组旋转没有聚合函数或行到列

algorithm - 去除重复的 n-gram 集

sql - Postgres : DB information for logging purpose

python - 使用 SQL 创建 Oracle 数据库表到另一个 Oracle 数据库的副本

sql - 在 PostgreSQL 中直到当前日期的每月工作日

c++ - c++0x 中 POD 类型的访问说明符和使用初始值设定项列表之间的关系

oop - DDD : Address as an aggregate root?

sql - 如何从表中加入 COUNT,然后用另一个 JOIN 影响该 COUNT