如何在使用group by子句时跳过Orientdb中的空记录

时间:2016-02-22 12:29:28

标签: orientdb orientdb-2.1

当我执行以下查询时:

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时跳过空值吗?

2 个答案:

答案 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

我没有错误,也没有正确的结果。

enter image description here

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

这里我有正确的结果

enter image description here

希望它有所帮助。

答案 1 :(得分:0)

这可以解决您的问题:

删除索引并使用引擎Lucene重新创建另一个全文类型的索引。

enter image description here

询问你得到这个结果:

enter image description here