#sql #cratedb
Вопрос:
Я работаю над агрегированием (суммированием) всех возвращаемых значений массива.
Целевой столбец содержит объекты, которые содержат массив объектов. например
Object
- person: "bob"
- children:
- zaphod
- age: 42
- ford
- age: 42
В приведенном выше примере я пытаюсь провести агрегацию по возрастам, как это было, но безрезультатно:
SELECT SUM(people['children']['age'])
FROM mydatabase
WHERE people IS NOT null
LIMIT 100;
Ошибка, которую я вижу, — «Исключение UnsupportedFeatureException».
Я могу согласиться, если эта функция не поддерживается. Но мне любопытно, не иду ли я просто по неправильному пути. Можно ли это сделать, или мне лучше управлять данными с помощью последующего процесса?
Ответ №1:
Версия 4.6 CrateDB (выпущена 2021-07-13) включает в себя новую скалярную функцию array_sum, которая может это делать:
SELECT ARRAY_SUM(people['children']['age'])
FROM mydatabase
WHERE people IS NOT null
LIMIT 100;