如何告诉 SQL 在“出现正值”时返回 TRUE 而不是使用 SUM(field) >0 条件

Posted

技术标签:

【中文标题】如何告诉 SQL 在“出现正值”时返回 TRUE 而不是使用 SUM(field) >0 条件【英文标题】:How to tell SQL to return TRUE on "positive value occurance" rather than using SUM(field) >0 condition 【发布时间】:2015-10-01 15:38:52 【问题描述】:

我正在对具有 0 或正值的 QTY 字段进行聚合。因此,任何正数的存在都可以预测总和将大于 0。一旦找到正值,有没有办法返回 true 而不是对所有行求和?它是 DB2 数据库。

 select *
    from a
    where a_id in (1,2,3,4)
    and
    (
      flag = 'Y' 
      or 
      (select sum(qty) from b where b.a_id = a.a_id) > 0
    )

【问题讨论】:

如果列中存在负值,您假设的逻辑将失败。 是的,但是如果数据存在,聚合函数必须添加 500 多行,这让我很想找到一种在任何正值出现时返回 TRUE 的方法,而不是添加 500 个字段值。不过我的想法可能有问题.. sum 足够快。加起来 500 + 行值并不像你想象的那么乏味 那很好,我只使用 sum ,就像你说的那样很快。如果有任何方法,想与你们交叉检查。如果SQL添加像hasAnyPositiveValue()、hasAnyNegativeValue()这样的聚合函数会更好。只是说.. 这正是下面的答案所做的。查看exists 的工作原理 【参考方案1】:

EXISTS 会更快吗?

 select *
    from a
    where a_id in (1,2,3,4)
    and
    (
      flag = 'Y' 
      or 
      EXISTS (select b.a_id from b where b.a_id = a.a_id and qty>0)
    )

【讨论】:

我必须检查,但如果数据存在,特定聚合必须汇总 500 多行。 90% 的时间会有数据。存在可以改进,但我想知道是否有任何其他函数或技巧可以在任何正值出现时返回 TRUE 我想你会发现 EXISTS 正是这样做的。祝你好运,拉贾。 哎呀!!只是我的错误:|我应该注意到 qty>0 并且存在...感谢您在我的废话中保持耐心:)

以上是关于如何告诉 SQL 在“出现正值”时返回 TRUE 而不是使用 SUM(field) >0 条件的主要内容,如果未能解决你的问题,请参考以下文章

谁能告诉我,内部联接在 SQL 中是如何工作的?

删除行时,SQL 触发器中的 UPDATED() 函数是不是返回 true?

SQL如何替换选择返回的值?

mysqli->query 在更新时返回 true,但不影响行

如何告诉 phpunit 在失败时停止

SET ANSI_NULLS ON 在T-SQL中是什么意思