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

求Firebird 3中Count with Case等效写法,遇SQL错误码-104

解决Firebird 3中Count+Case的等效写法问题

嘿,刚接触Firebird的CASE语法踩坑很正常!你遇到的SQL错误码-104,是因为Firebird对布尔表达式的处理逻辑和SQLite不一样——它不允许你把两个CASE的结果直接用AND拼起来丢给Count函数。

你的需求是统计同时满足两个关键字条件的行数(因为关键字存在多行,没法用WHERE直接过滤),那我们可以把两个条件合并到同一个CASE语句里,这样Firebird就能正确识别了。

正确写法1:用Count结合单CASE

SELECT Count(CASE 
    WHEN keywords.keyword LIKE '%purchased%' 
         AND keywords.keyword LIKE '%your_second_keyword%' -- 替换成你的第二个条件
    THEN 1 
END) AS matched_rows
FROM keywords;

原理很简单:当两个条件都满足时,CASE返回1,否则返回NULL;而Count函数会自动忽略NULL值,最终统计的就是同时符合两个条件的行数。

正确写法2:用Sum替代Count

如果你觉得Count的逻辑有点绕,也可以用Sum来实现,效果完全一样:

SELECT SUM(CASE 
    WHEN keywords.keyword LIKE '%purchased%' 
         AND keywords.keyword LIKE '%your_second_keyword%'
    THEN 1 
    ELSE 0 
END) AS matched_rows
FROM keywords;

这里符合条件的行加1,不符合的加0,Sum直接累加出总数,Firebird对这种写法的兼容性也很好。

为什么原语句报错?

SQLite比较灵活,允许把两个CASE的结果(1或NULL)做布尔AND运算,但Firebird对表达式的类型要求更严格——它不支持在Count的参数里直接做这种布尔拼接,必须把所有判断逻辑整合到单个CASE的WHEN子句中才行。

内容的提问来源于stack exchange,提问作者nDelphi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:30:52