在检查先前编写的查询时,我遇到以下问题:
coalesce(
min( CASE WHEN plo.transaction_type IS DISTINCT FROM 'QRec' THEN plo.id END ),
min( plo.id )
)
在我看来,这在功能上等同于min( plo.id )
。我缺少一些微妙之处吗?他们不会产生相同结果的某些极端情况?换句话说:我有什么理由不应该只用min( plo.id )
代替它吗?
如果有问题,我正在PostgreSQL 9.3中工作,但是由于合并,最小和大小写都是ANSI,所以通用的'sql'标记似乎更合适。
答案 0 :(得分:0)
它们不一样。如果plo.transaction_type
仅采用值'QRec'
,则第一个表达式返回NULL
。
如果实际最小值仅在'QRec'
行上,这些结果也会返回不同的结果。
答案 1 :(得分:0)
我设法解决了。区别在于CASE在min()函数内部(与min()函数在CASE内部相反)。
因此,coalesce()
函数中的第一个参数给出了具有非{plo.id
'Qrec'
的所有行中的最小transaction_type
值,而第二个参数给出了最小值不管plo.id
为何,在所有行上的transaction_type
值。