我在寻找类似于SUMSELECT PRODUCT(table.price) FROM table GROUP BY table.sale个.

我是否遗漏了文档中的某些内容,或者真的没有PRODUCT函数?

如果是,为什么不呢?

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

推荐答案

SQL标准中没有PRODUCT集函数.不过,它似乎是一个很有价值的候选者(与CONCATENATE集函数不同:它不太适合SQL,例如,生成的数据类型将涉及多值,并对第一个范式造成问题).

SQL标准的目标是在大约1990年前后整合SQL产品的功能,并为future 的开发提供"思想领导".简而言之,它们记录了SQL的功能和应该做什么.PRODUCT集函数的缺失表明,1990年没有供应商,尽管它值得纳入,也没有学术兴趣将其引入标准.

当然,供应商总是试图添加自己的功能,这些天通常是作为标准的扩展,而不是间接的.我不记得在我使用的任何SQL产品中看到过PRODUCT集函数(甚至不需要).

在任何情况下,使用logexp个标量函数(以及处理负数的逻辑)和SUM set函数都相当简单;有关一些示例代码,请参见@gbn的答案.不过,我从来没有在商业应用程序中这样做过.

总之,我的最佳猜测是,SQL最终用户对PRODUCT集函数没有需求;此外,任何有学术兴趣的人都可能会发现这种变通方法是可以接受的(即,不会重视PRODUCT集函数提供的语法糖分).

出于兴趣,SQL Server领域确实需要新的集合函数,但也需要窗口函数(以及标准SQL).有关更多详细信息,包括如何参与进一步推动需求,请参见Itzik Ben-Gan's blog.

Sql相关问答推荐

IS True操作员

从以前的非空值行中获取值

如何在SQL Server中列出从当前月份开始的过go 10年中的月份

用于匹配红旗和绿旗的SQL查询

OVER子句WITH PARTITION BY和ORDER BY忽略主查询的WHERE子句

直接加法(1+1)与聚合函数SUM(1+1)的区别是什么

两个不同星期的销售额,不加成一行

从数据库中查找总和大于或等于查询中的数字的数字

如果另一个表中不存在值列,则插入失败

SQL查询正在工作,但返回空结果

SQL 查询是否返回列表中仅包含某些值而不包含其他值的行?

如何从三个连接表中获取数据,并始终显示第一个表中的数据,以及第三个表中的空值或现有记录?

什么是 100.它与 100 有什么区别?

如何在第二个 INSERT 中使用第一个 INSERT 自动生成的 ID

获取所有用户的第一次和最后一次发货以及到达日期

在没有订单的情况下,如何生成一个值为0的顾客天数行

多行状态下的分组查询判断状态

在 SQL 中使用循环遍历按时间顺序排列的数据

在多个表上递归查找

有没有一种方法可以将始终遵循序列的单个字段的值组合起来,以创建每个 ID 的所有移动?