当前位置: 首页 > 面试题库 >

空结果集的集合

张成济
2023-03-14
问题内容

我希望将空结果集的总计设置为0。我尝试了以下方法

SELECT SUM(COALESCE(capacity, 0))
  FROM objects
 WHERE null IS NOT NULL;

结果:

sum 
-----

(1 row)

子问题:上面的工作在Oracle中行不通SUM(NVL(capacity, 0))吗?


问题答案:

在有关聚合函数的文档页面中:

应该注意的是,除了count这些函数, 当没有选择任何行时 ,这些函数将 返回空值
。特别是,sum没有行返回空值,而不是预期的零值。coalesce必要时,该函数可用于将零替换为null。

所以,如果你想保证返回的值,适用COALESCE结果SUM,而不是它的参数:

SELECT COALESCE(SUM(capacity), 0) 鈥�

至于Oracle的“子问题”,我在官方文档页面(尤其是10.2的页面)上找不到任何NULL的概念,但是另外两个明确的来源:

  • Oracle SQL函数:

SUM([DISTINCT] n)n的值之和, 忽略NULL

  • sum聚合函数[Oracle SQL]:

“ fa sum()在某些数字上创建, 忽略空值 ,如以下示例所示”。

也就是说,您无需将NVL应用于capacity。(但是,就像COALESCE在PostgreSQL中一样,您可能希望将其应用于SUM。)



 类似资料:
  • 问题内容: 我正在使用JDBC来实现非常简单的数据库连接。 我已经创建了连接/语句并执行了查询。我在调试器中检查语句的查询对象,以确认它正在发送正确的查询。然后,我再次检查了数据库中的查询(直接从调试器复制),以确保其返回数据。但是,返回的结果集在.next()上给出false 这里有我遗漏的常见陷阱吗? 还有myDB类(一个简单的包装程序,使我可以将连接/语句代码放入任何项目中) 编辑:根据建议

  • 主要内容:ResultSet类型,ResultSet的并发性,浏览结果集,查看结果集,更新结果集SQL语句执行后从数据库查询读取数据,返回的数据放在结果集中。 语句用于从数据库中选择行并在结果集中查看它们的标准方法。 接口表示数据库查询的结果集。 对象维护指向结果集中当前行的游标。 术语“结果集”是指包含在对象中的行和列数据。 接口的方法可以分为三类: 浏览方法:用于移动光标。 获取方法:用于查看光标指向的当前行的列中的数据。 更新方法:用于更新当前行的列中的数据。 然后在基础数据库中更新数

  • 我有这样的代码 我试图与kategorikode_kategori,但出现错误,请帮助我

  • 我正在使用JOOQ和Postgres。在博士后中,我有一个专栏性别: (表本身是一个视图,性别列是用Java计算的值的占位符) 在Java中,当I.fetch()视图时,我会对每条记录进行一些计算: 所有看起来都很好,如果打印值,它们都是正确的。但是,当我在我的技能记录上调用intoResultSet()时,性别列在所有值旁边都有一个星号,例如“*男性”。 然后,我使用结果集作为OpenCSV C

  • 问题内容: 我正在尝试创建一种方法,从中可以查询数据库并检索整个表。 目前,如果我使用这些数据只是正常工作 中 的方法。但是,我希望该方法返回结果。 我正在了解当前代码。 我该如何实现? 问题答案: 您永远不要通过公共方法来回避。这很容易导致资源泄漏,因为您不得不保持语句和连接打开。关闭它们将隐式关闭结果集。但是,将它们保持打开状态将导致它们悬而未决,并且当它们打开过多时,将导致数据库用尽资源。

  • 问题内容: 将结果集放入会话中有什么缺点?如果不是这样,那是最好的方法。我尝试将其放在中,这不会影响性能吗? 问题答案: A 代表与数据库的开放连接;通常,您希望获取数据并尽快将连接返回到池中。在会话中存储a 可能会导致长时间不关闭连接,这可能会耗尽池或不必要地占用数据库资源。