如何按bit类型列分组?分组后NULL值正确返回问题
解决方案
你的问题出在coalesce(quota,0)这一步——它把所有NULL都转换成了0,导致当某个id的quota全是NULL时,max(coalesce(quota,0))的结果变成了0,所以CASE分支会返回0,而不是你想要的NULL。
要实现你的需求,我们需要先区分分组内是否存在非NULL的quota值,再决定返回值:
- 如果分组里全是NULL:返回NULL
- 如果分组里有非NULL值:取quota的最大值(bit类型的max会自动帮你搞定——有1就返回1,只有0就返回0)
修正后的查询语句如下:
SELECT id, CASE WHEN COUNT(quota) = 0 THEN NULL -- 全是NULL的情况 ELSE MAX(quota) -- 有非NULL值时取最大值 END AS quota FROM forbit GROUP BY id
我们来验证一下这个逻辑:
- id=1:有quota=1,MAX(quota)=1 → 返回1
- id=2:有quota=0,没有1,MAX(quota)=0 → 返回0
- id=3:所有quota都是NULL,COUNT(quota)=0 → 返回NULL
完全符合你的期望结果。
内容的提问来源于stack exchange,提问作者jayesh kshirsagar
相关产品推荐
相关产品推荐

