COALESCE函数中的此CASE表达式是否多余?

时间:2019-11-05 20:39:04

标签: sql postgresql

在检查先前编写的查询时,我遇到以下问题:

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'标记似乎更合适。

2 个答案:

答案 0 :(得分:0)

它们不一样。如果plo.transaction_type仅采用值'QRec',则第一个表达式返回NULL

如果实际最小值仅在'QRec'行上,这些结果也会返回不同的结果。

答案 1 :(得分:0)

我设法解决了。区别在于CASE在min()函数内部(与min()函数在CASE内部相反)。

因此,coalesce()函数中的第一个参数给出了具有非{plo.id 'Qrec'的所有行中的最小transaction_type值,而第二个参数给出了最小值不管plo.id为何,在所有行上的transaction_type值。