SQL GROUP BY并为每个GROUP

时间:2018-10-31 09:07:36

标签: sql group-by sql-insert orientdb

更新: 我可以通过 INSERT INTO (插入到)来解决此问题:

INSERT INTO newClass FROM SELECT newClassID AS id, newClassName AS name FROM oldClass GROUP BY newClassID

我在Orient DB 2.2版中使用SQL。 我想通过属性newClassID对一个类的元素进行分组(此类中有多个共享newClassID的Elements,可以说我在第一类中有20个Elements和3个唯一的newClassID)。每个组将具有唯一的newClassID和newClassName,因为这些属性是并行的。 对于每个组,我要创建另一个类(newClass)的元素,该元素的id为newClassID,名称为newClassName。在上述情况下,这将在newClass中产生3个新元素。

头等舱的Emelemt看起来像:

+-------+------------+--------------+
| Elem  | newClassID | newClassName |
+-------+------------+--------------+
|   1   |    id1     |    name1     |
|   2   |    id2     |    name2     |
|   3   |    id1     |    name1     |
|   4   |    id3     |    name3     |
|   5   |    id2     |    name2     |
+-------+------------+--------------+

然后我要在新类中创建3个新元素:

+-------+------------+--------------+
| Elem  |     ID     |     Name     |
+-------+------------+--------------+
|   1   |    id1     |    name1     |
|   2   |    id2     |    name2     |
|   3   |    id3     |    name3     |
+-------+------------+--------------+

通过此查询,我获得ID和名称作为属性:

BEGIN
let pattern = SELECT newClassID, newClassName FROM oldClass GROUP BY newClassID
COMMIT
RETURN { 'id' : $pattern.newClassID, 'name' : $pattern.newClassName }

结果:

[
    {
        "@type": "d",
        "@version": 0,
        "name": [
            "name1",
            "name2",
            "name3"
        ],
        "id": [
            "id1",
            "id2",
            "id3"
        ],
        "@fieldTypes": "name=e,id=e"
    }
]

现在,我想调用此函数(称为GetNewClass()),并为id中的每个条目创建一个newClassElement。我不能使用FOREACH,因为它仅在3.x版本中可用。老实说:在这里我不知道如何做到这一点。

我尝试过:

BEGIN
INSERT INTO newClass FROM SELECT GetNewClass()
let newElements = SELECT FROM newClass
RETURN $newElements 

但这给了我一个要素:

[
    {
        "@type": "d",
        "@rid": "#41:1",
        "@version": 1,
        "@class": "newClass",
        "GetProdID": {
            "name": [
                "name1",
                "name2",
                "name3"
            ],
            "id": [
                "id1",
                "id2",
                "id3"
            ]
        }
    }
]

非常感谢!

0 个答案:

没有答案