OrientDB平均收集

时间:2015-02-13 19:10:34

标签: sql aggregate average orientdb

我正在尝试使用一些简单的应用程序进行orientdb。

在这个应用程序中,我有人(角色)和吃饭的地方(sitio),人们去那些地方(我存储了多少次)并给他们打分。

使用此查询:

SELECT *, 
inE('puntua').comida as comida, 
inE('puntua').servicio as servicio, 
inE('puntua').extras as extras
from Sitio

我设法得到所有地方的分数,但数组中的分数,我不能应用Avg()函数。

Data Returned By Query

tldr;

我是否误解了这种新的Graph建模技术?还是有更好的方法来获得这些平均值?

GraphDB

1 个答案:

答案 0 :(得分:0)

<强> EDITED

create class Puntua extends E

create class Sitio extends V

create class Persona extends V

create vertex Persona set name = 'person' # returns #17:0
create vertex Sitio set place = 'mcdonals' # returns #16:0
create vertex Sitio set place = 'burgerking'
create vertex Sitio set place = 'glicinia' # returns #16:2

create edge Puntua from 17:0 to 16:0 set comida = 8, servicio = 9, = extras = 7
create edge Puntua from 17:0 to 16:0 set comida = 8, servicio = 7, = extras = 9
create edge Puntua from 17:0 to 16:2 set comida = 8, servicio = 7, = extras = 9

如果以上是您的情况,我相信您正在寻找的查询类似于:

SELECT *, myAvg(comida), myAvg(servicio), myAvg(extras) 
FROM (
   SELECT place, 
      inE('Puntua').comida as comida, 
      inE('Puntua').servicio as servicio, 
      inE('Puntua').extras as extras
   FROM Sitio
)

其中myAvg是一个javascript函数:

var graph = orient.getGraph();
var res = graph.command( "sql", "select avg(list) from (select " + list + " as list)");
if(res.length > 0){
    return res[0].getRecord().field('avg');
} else{
    return null;
}

喜欢here。 (注意列表参数)

输出为this