You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:08:01