SQL GROUP BY и создать элемент для каждой группы - PullRequest
0 голосов
/ 31 октября 2018

UPDATE: Я смог решить эту проблему с помощью INSERT INTO :

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

Я использую SQL с Orient DB версии 2.2. Я хочу сгруппировать элемент одного класса по атрибуту newClassID (есть несколько элементов в этом классе, которые совместно используют newClassID, скажем, у меня есть 20 элементов в первом классе и 3 уникальных newClassID). Каждая группа будет иметь уникальный newClassID, а также newClassName, поскольку эти атрибуты идут рука об руку. Для каждой группы я хочу создать элемент другого класса (newClass), который будет иметь id = newClassID и name = newClassName. В приведенном выше случае это приведет к 3 новым элементам в newClass.

Эмелемт первого класса будет выглядеть так:

+-------+------------+--------------+
| 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     |
+-------+------------+--------------+

С помощью этого запроса я получаю идентификатор и имя в качестве атрибутов:

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 новыйClassElement. Я не могу использовать 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"
            ]
        }
    }
]

Большое спасибо!

...