试图在OrientDB

时间:2016-03-31 15:21:44

标签: orientdb

我正在使用OrientDB的UI /查询工具来分析一些图形数据,我花了几天时间试图解开两个数组失败。

展开子句适用于一个数组,但在尝试展开两个数组时,我似乎无法获得我正在寻找的输出。

以下是我的数据的简化示例:

@class       |  amt  | storeID  | customerID  
transaction     $4        1         1
transaction     $2        1         1
transaction     $6        1         4
transaction     $3        1         4
transaction     $2        2         1
transaction     $7        2         1
transaction     $8        2         2
transaction     $3        2         2
transaction     $4        2         3
transaction     $9        2         3
transaction     $10       3         4
transaction     $3        3         4
transaction     $4        3         5
transaction     $10       3         5

每位客户都是一份包含以下信息的文件:

@class   | customerID | State 
customer     1             NY  
customer     2             NJ  
customer     3             PA
customer     4             NY  
customer     5             NY

每个商店都是一份包含以下信息的文件:

@class   | storeID | State |   Zip 
store         1         NY     1 
store         2         NJ     3    
store         3         NY     2    

假设我没有storeID(也不想创建它),我想恢复一个具有以下不同值的扁平表:商店名称,城市,帐号和花费的总和。

该查询有望生成类似下表(对于给定的深度值)。

State | Zip | customerID
 NY      1       4      
 NY      1       5      
 NY      2       1      
 NY      2       4      
 NJ      3       1      
 NJ      3       2      
 NJ      3       3      

我尝试了各种扩展/展平/展开操作,但我似乎无法让我的查询工作。

这是我的查询,将State和Zip恢复为两个数组并展平customerID:

SELECT  out().State as State, 
        out().Zip as Zip, 
        customerID 
    FROM ( SELECT EXPAND(IN()) 
            FROM (TRAVERSE * FROM 
                ( SELECT FROM transaction) 
        ) 
    ) ;

哪个收益率,

State            |   Zip     | customerID 
[NY, NY, NJ, NJ]   [1,1,2,2]       1   
[NY, NY, NJ, NJ]   [1,1,2,2]       1   
[NY, NY, PA, PA]   [1,1,3,3]       4
[NY, NY, PA, PA]   [1,1,3,3]       4
...                   ....      ....

这不是我想要的。有人可以提供一些帮助,我可以将这两个数组一起展平/展开吗?

1 个答案:

答案 0 :(得分:1)

我尝试了这种结构(基于你的例子):

enter image description here

我使用此查询来检索State,Zip和customerID(而不是数组):

  1. 查询1

    SELECT State, Zip, in('transaction').customerID AS customerID FROM Store 
    ORDER BY Zip UNWIND customerID
    
    ----+------+-----+----+----------
    #   |@CLASS|State|Zip |customerID
    ----+------+-----+----+----------
    0   |null  |NY   |1   |1
    1   |null  |NY   |1   |1
    2   |null  |NY   |1   |4
    3   |null  |NY   |1   |4
    4   |null  |NY   |2   |4
    5   |null  |NY   |2   |4
    6   |null  |NY   |2   |5
    7   |null  |NY   |2   |5
    8   |null  |NJ   |3   |1
    9   |null  |NJ   |3   |1
    10  |null  |NJ   |3   |2
    11  |null  |NJ   |3   |2
    12  |null  |NJ   |3   |3
    13  |null  |NJ   |3   |3
    ----+------+-----+----+----------
    
  2. 查询2

    SELECT inV('transaction').State AS State, inV('transaction').Zip AS Zip, 
    outV('transaction').customerID AS customerID FROM transaction ORDER BY Zip
    
    ----+------+-----+----+----------
    #   |@CLASS|State|Zip |customerID
    ----+------+-----+----+----------
    0   |null  |NY   |1   |1
    1   |null  |NY   |1   |1
    2   |null  |NY   |1   |4
    3   |null  |NY   |1   |4
    4   |null  |NY   |2   |4
    5   |null  |NY   |2   |4
    6   |null  |NY   |2   |5
    7   |null  |NY   |2   |5
    8   |null  |NJ   |3   |1
    9   |null  |NJ   |3   |1
    10  |null  |NJ   |3   |2
    11  |null  |NJ   |3   |2
    12  |null  |NJ   |3   |3
    13  |null  |NJ   |3   |3
    ----+------+-----+----+----------
    
  3. <强> EDITED

    在以下示例中,通过查询,您将能够检索每个storeID的平均花费和总花费(基于每个customerID):

    SELECT customerID, storeID, avg(amt) AS averagePerStore, sum(amt) AS totalPerStore
    FROM transaction GROUP BY customerID,storeID ORDER BY customerID
    
    ----+------+----------+-------+---------------+-------------
    #   |@CLASS|customerID|storeID|averagePerStore|totalPerStore
    ----+------+----------+-------+---------------+-------------
    0   |null  |1         |1      |3.0            |6.0
    1   |null  |1         |2      |4.5            |9.0
    2   |null  |2         |2      |5.5            |11.0
    3   |null  |3         |2      |6.5            |13.0
    4   |null  |4         |1      |4.5            |9.0
    5   |null  |4         |3      |6.5            |13.0
    6   |null  |5         |3      |7.0            |14.0
    ----+------+----------+-------+---------------+-------------
    

    enter image description here

    希望有所帮助