SQL 按存储在数组中的值分组

SQL group by values stored in arrays

我使用 OrientDB。 我有一个像这样的 table:

 NAME | CATEGORIES
-------------------
  N1  |   [A,B]
  N2  |   [C]
  N3  |   [C,A]
  N4  |   [A,B]

我想构建一个查询,其中 returns 一个类别列表,每个类别都有一个相关名称列表,如下所示:

 CATEGORY |   NAMES
-----------------------
    A     | [N1,N3,N4]
    B     | [N1,N4]
    C     | [N2,N3]

如果 "categories" 不是数组,我可以通过以下方式实现它:

SELECT
  Categories as Category,
  set(Name) as Names
FROM Table
GROUP BY Categories

但是,作为类别数组,这就是我得到的:

 CATEGORY |  NAMES
--------------------
   [A,B]  | [N1,N4]
    [C]   | [N2]
   [C,A]  | [N3]

我应该写什么查询?

我用这个命令复制了你的结构

create class test extends v
create property test.name string
create property test.categories embeddelist string

insert into test(name,categories) values ("N1",["A","B"]),("N2",["C"]),("N3",["C","A"]),("N4",["A","B"])

我使用了这个查询

select categories,$a.name as name from (select distinct(categories) as categories from (select categories  from test order by categories unwind categories))
let $a = (select name from test where categories contains $parent.$current.categories)

希望对您有所帮助。