Начало работы
Подключение
Тесты производительности
Развёртывание
Использование данных
Загрузка данных
Миграция данных
Запрос данных
Управление кластерами
Обновление
Глобальное обслуживание
Масштабирование
Мониторинг
Безопасность
Лучшие практики
Технические принципы
Типы данных
Хранилище
Исполняющий движок
Потоковая обработка (Domino)
MARS3 Индексы
Расширения
Расширенные функции
Расширенный запрос
Федеративные запросы
Grafana
Резервное копирование и восстановление
Аварийное восстановление
Графовая база данных
Введение
Предложения
Функции
Расширенные темы
Руководство
Настройка производительности
Устранение неполадок
Инструменты
Параметры конфигурации
SQL-команда
Часто задаваемые вопросы
Функции, вызывающие автоматическую агрегацию.
LOAD 'age';
SET search_path TO ag_catalog;
SELECT create_graph('graph_name');
SELECT * FROM cypher('graph_name', $$
CREATE (a:Person {name: 'A', age: 13}),
(b:Person {name: 'B', age: 33, eyes: "blue"}),
(c:Person {name: 'C', age: 44, eyes: "blue"}),
(d1:Person {name: 'D', eyes: "brown"}),
(d2:Person {name: 'D'}),
(a)-[:KNOWS]->(b),
(a)-[:KNOWS]->(c),
(a)-[:KNOWS]->(d1),
(b)-[:KNOWS]->(d2),
(c)-[:KNOWS]->(d2)
$$) as (a agtype);
min()Функция min() возвращает наименьшее значение из набора значений.
Синтаксис: min(expression)
Возвращаемое значение:
Значение типа agtype — скалярное или список — в зависимости от результата выражения `expression`.
Параметры:
| Имя | Описание |
|---|---|
expression |
Выражение, возвращающее коллекцию скаляров или списков типа agtype. |
Примечания:
null исключаются из расчёта.min(null) возвращает null.Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (v:Person)
RETURN min(v.age)
$$) as (min_age agtype);
Возвращает минимальное значение среди всех значений свойства age.
Результат:
| min_age |
|---|
| 13 |
| 1 строка |
min() с массивамиПодготовка данных:
Для демонстрации следующего примера выполните три команды:
SELECT * FROM cypher('graph_name', $$
CREATE (:min_test {val:'d'})
$$) as (result agtype);
SELECT * FROM cypher('graph_name', $$
CREATE (:min_test {val:['a', 'b', 23]})
$$) as (result agtype);
SELECT * FROM cypher('graph_name', $$
CREATE (:min_test {val:[1, 'b', 23]})
$$) as (result agtype);
Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (v:min_test)
RETURN min(v.val)
$$) as (min_val agtype);
Возвращает наименьшее значение в коллекции — в данном случае список ['a', 'b', 23], поскольку:
(i) оба списка имеют меньший приоритет по сравнению со строкой 'd', и
(ii) строка 'a' имеет меньший приоритет по сравнению с числом 1.
Результат:
| min_val |
|---|
| ["a", "b", 23] |
| 1 строка |
max()Функция max() возвращает наибольшее значение из набора значений.
Синтаксис: max(expression)
Возвращаемое значение:
Значение типа agtype — скалярное или список — в зависимости от результата выражения `expression`.
Параметры:
| Имя | Описание |
|---|---|
expression |
Выражение, возвращающее коллекцию скаляров или списков типа agtype. |
Примечания:
null исключаются из расчёта.max(null) возвращает null.Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN max(n.age)
$$) as (max_age agtype);
Возвращает максимальное значение среди всех значений свойства age.
Результат:
| max_age |
|---|
| 44 |
| 1 строка |
stDev()Функция stDev() возвращает выборочное стандартное отклонение множества значений. Используется стандартный двухпроходный алгоритм с делителем N − 1, подходящий для несмещённой оценки по выборке из генеральной совокупности. Для вычисления стандартного отклонения всей генеральной совокупности используйте stDevP().
Синтаксис: stDev(expression)
Возвращаемое значение:
Число с плавающей точкой типа agtype.
Параметры:
| Имя | Описание |
|---|---|
expression |
Числовое выражение типа agtype |
Примечания:
null исключаются из расчёта.stDev(null) возвращает 0.0.Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN stDev(n.age)
$$) as (stdev_age agtype);
Возвращает выборочное стандартное отклонение значений свойства age.
Результат:
| stdev_age |
|---|
| 15.716233645501712 |
| 1 строка |
stDevP()Функция stDevP() возвращает стандартное отклонение генеральной совокупности множества значений. Используется стандартный двухпроходный алгоритм с делителем N, подходящий для вычисления стандартного отклонения всей совокупности. Для вычисления стандартного отклонения выборки из совокупности используйте stDev().
Синтаксис: stDevP(expression)
Возвращаемое значение:
Число с плавающей точкой типа agtype.
Параметры:
| Имя | Описание |
|---|---|
expression |
Числовое выражение типа agtype |
Примечания:
null исключаются из расчёта.stDevP(null) возвращает 0.0.Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN stDevP(n.age)
$$) as (stdevp_age agtype);
Возвращает стандартное отклонение генеральной совокупности значений свойства age.
Результат:
| stdevp_age |
|---|
| 12.832251036613439 |
| 1 строка |
percentileCont()Функция percentileCont() возвращает непрерывный процентиль множества значений. Аргумент процентиля должен находиться в диапазоне от 0.0 до 1.0. Применяется линейная интерполяция: если запрошенный процентиль находится между двумя значениями, вычисляется взвешенное среднее. Для округления до ближайшего существующего значения используйте percentileDisc().
Синтаксис: percentileCont(expression, percentile)
Возвращаемое значение:
Число с плавающей точкой типа agtype.
Параметры:
| Имя | Описание |
|---|---|
expression |
Числовое выражение типа agtype |
percentile |
Числовое значение типа agtype от 0.0 до 1.0 |
Примечания:
null исключаются из расчёта.percentileCont(null, percentile) возвращает null.Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN percentileCont(n.age, 0.4)
$$) as (percentile_cont_age agtype);
Возвращает 40-й процентиль значений свойства age, вычисленный методом линейной интерполяции.
Результат:
| percentile_cont_age |
|---|
| 29.0 |
| 1 строка |
percentileDisc()Функция percentileDisc() возвращает дискретный процентиль множества значений. Аргумент процентиля должен находиться в диапазоне от 0.0 до 1.0. Используется округление до ближайшего существующего значения. Для интерполированных результатов используйте percentileCont().
Синтаксис: percentileDisc(expression, percentile)
Возвращаемое значение:
Число с плавающей точкой типа agtype.
Параметры:
| Имя | Описание |
|---|---|
expression |
Числовое выражение типа agtype |
percentile |
Числовое значение типа agtype от 0.0 до 1.0 |
Примечания:
null исключаются из расчёта.percentileDisc(null, percentile) возвращает null.Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN percentileDisc(n.age, 0.5)
$$) as (percentile_disc_age agtype);
Возвращает 50-й процентиль (медиану) значений свойства age.
Результат:
| percentile_disc_age |
|---|
| 33.0 |
| 1 строка |
count()Функция count() возвращает количество значений или записей. Имеет две формы:
count(*) возвращает количество совпадающих записей.count(expr) возвращает количество ненулевых значений, возвращённых выражением expr.Синтаксис: count(expression)
Возвращаемое значение:
Целое число типа agtype.
Параметры:
| Имя | Описание |
|---|---|
expression |
Любое выражение. |
Примечания:
count(*) включает записи, которые могут дать null.count(expr) исключает значения null.count(null) возвращает 0.count(*) можно использовать для подсчёта узлов; например, для подсчёта узлов, связанных с заданным узлом n.Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (n {name: 'A'})-[]->(x)
RETURN n.age, count(*)
$$) as (age agtype, number_of_people agtype);
Возвращает значение свойства age начального узла n (где name = 'A') и количество узлов, связанных с n.
Результат:
| age | number_of_people |
|---|---|
| 13 | 3 |
| 1 строка |
С помощью count(*) также можно группировать и подсчитывать типы рёбер, получая количество для каждого типа.
Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (n {name: 'A'})-[r]->()
RETURN type(r), count(*)
$$) as (label agtype, count agtype);
Возвращает каждый тип отношения и его количество.
Результат:
| label | count |
|---|---|
| "KNOWS" | 3 |
| 1 строка |
count(expression)Подсчёт фактических ненулевых значений, возвращённых выражением, может быть полезнее простого подсчёта записей с помощью count(*).
Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (n {name: 'A'})-[]->(x)
RETURN count(x)
$$) as (count agtype);
Возвращает количество узлов, связанных с начальным узлом n.
Результат:
| count |
|---|
| 3 |
| 1 строка |
Функция count(expression) подсчитывает только ненулевые значения, возвращённые выражением.
Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN count(n.age)
$$) as (count agtype);
Возвращает количество узлов Person, у которых свойство age не равно null.
Результат:
| count |
|---|
| 3 |
| 1 строка |
В этом примере находятся все друзья друзей и подсчитывается их количество:
count(DISTINCT friend_of_friend) подсчитывает каждый friend_of_friend только один раз, так как DISTINCT удаляет дубликаты. count(friend_of_friend) подсчитывает повторяющиеся значения friend_of_friend несколько раз.Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (me:Person)-[]->(friend:Person)-[]->(friend_of_friend:Person)
WHERE me.name = 'A'
RETURN count(DISTINCT friend_of_friend), count(friend_of_friend)
$$) as (friend_of_friends_distinct agtype, friend_of_friends agtype);
Узлы B и C связаны с D, поэтому D учитывается дважды при отсутствии DISTINCT.
Результат:
| friend_of_friends_distinct | friend_of_friends |
|---|---|
| 1 | 2 |
| 1 строка |
avg()Функция avg() возвращает арифметическое среднее множества числовых значений.
Синтаксис: avg(expression)
Возвращаемое значение:
Целое число или число с плавающей точкой типа agtype.
Параметры:
| Имя | Описание |
|---|---|
expression |
Выражение, возвращающее набор чисел. |
Примечания:
null исключаются из расчёта.avg(null) возвращает null.Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN avg(n.age)
$$) as (avg_age agtype);
Возвращает среднее значение всех значений свойства age.
Результат:
| avg_age |
|---|
| 30.0 |
| 1 строка |
sum()Функция sum() возвращает сумму множества числовых значений.
Синтаксис: sum(expression)
Возвращаемое значение:
Число с плавающей точкой типа agtype.
Параметры:
| Имя | Описание |
|---|---|
expression |
Выражение, возвращающее набор чисел. |
Примечания:
null исключаются из расчёта.sum(null) возвращает null.Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (n:Person)
RETURN sum(n.age)
$$) as (total_age agtype);
Возвращает сумму всех значений свойства age.
Результат:
| total_age |
|---|
| 90 |
| 1 строка |