当我执行以下查询时:
SELECT count(*) as count, $new_source as name
from news
LET $new_source = if(eval("source.indexof('Other') === 0"), "Other", source)
where country_id = "111111"
group by $new_source
它抛出错误说:
com.orientechnologies.orient.core.exception.OCommandExecutionException: 表达式项'source'无法解析,因为当前记录是 NULL
如果“news”类中给定country_id至少有一条记录,那么它很有效,但是如果没有给定country_id的记录,那么就会抛出此错误。
由于我对所有新闻记录使用通用查询而不考虑country_id,因此如果特定国家/地区没有记录,我希望返回空记录集。
我也试过使用orientdb的ifnull函数来跳过空值,如下所示:
SELECT count(*) as count, $new_source as name from news LET $new_source = ifnull(source, 0, if(eval("source.indexof('Other') === 0"), "Other", source)) where country_id = "111111" group by $new_source
但它不起作用,并抛出相同的错误。
我正在使用OrientDb 2.1.8。我不想使用javascript函数并从控制台调用它(如建议的here)
有什么办法,我可以在使用if with group by时跳过空值吗?
答案 0 :(得分:1)
我尝试修改您的查询,也许我找到了解决方案:
select count(*) as count,name
from (
select if(eval("source.indexof('Other') === 0"), "Other", source) as name
from news where country_id = "111111")
group by name
我没有错误,也没有正确的结果。
select count(*) as count,name
from (
select if(eval("source.indexof('Other') === 0"), "Other", source) as name
from news where country_id = "1110")
group by name
这里我有正确的结果
希望它有所帮助。
答案 1 :(得分:0)