如何告诉 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 触发器中的 UPDATED() 函数是不是返回 true?