PostgreSql. Поиск значения в массиве


Поиск значений в массиве (array). База данных postgresql.


На самом деле найти значения в массиве не так сложно. И в этой публикации мы разберем как это сделать.

Представим ситуацию, что у нас есть офисные сотрудники, которые заработали за месяц какую то сумму денег.
Кто-то зарабатывал чаще, а кто-то больше, но это не важно.
Приступим к формированию таблицы: создадим таблицу с именами пользователей в одной колонке и во второй колонке будут содержаться все их заработки в массиве.
Запрос на создание такой таблицы будет выглядеть так:
CREATE TABLE users (
    name            text,
    sum  integer[]
);

  • name - колонка с типом text
  • sum - колонка с суммами заработка. Тип поля integer. После указания типа указаны квадратные скобки ([]), которые говорят о том, что данное поля является массивом.


После выполнения запроса будет создана таблица users.

Заполним ее произвольными данными:
INSERT INTO users VALUES ('Антон', '{12345, 44454, 4578779, 787885, 67576, 58875263}');
INSERT INTO users VALUES ('Кирилл', '{42342, 57475373, 3453232, 2342586, 546457, 456546}');
INSERT INTO users VALUES ('Артур', '{67575, 67575, 67575, 67575, 67575, 67575}');
INSERT INTO users VALUES ('Дмитрий', '{67575, 456546, 3543, 3256456, 35436456, 23536574}');
INSERT INTO users VALUES ('Вячеслав', '{67575, 34534534, 45645645, 3256456, 35436456, 5464574}');
INSERT INTO users VALUES ('Юрий', '{34534534, 4363463, 3543, 54645654, 436456, 675758}');


Приступим к поиску значения в массиве.
  • Поиск значения в указанном элементе массива
    Запрос, который позволяет найти и вывести все строки, где в первых четырех элементах встречаются указанные значения:
    SELECT * FROM users WHERE sum[1] = 67575 OR sum[2] = 67575 OR sum[3] = 67575 OR sum[4] = 54645654;

    Результат:

  • Поиск значения в массиве
    Ищем значение 67575 в колонке (sum), которая представляет из себя массив.
    Поиск в массиве осуществляется благодаря методу ANY.
    SELECT * FROM users where 67575 = any(sum);

    Результат:

  • Вывод строк, в которых все значения массива равны указанному значению
    Поиск строк, в которых массивы содержат только значения, равные 67575.
    Данный тип поиска можно выполнить при использовании функции ALL.
    SELECT * FROM users WHERE 67575 = ALL (sum);

    Результат:

  • Поиск строк, где хотя бы одно значение массива встречается в другом массиве.
    Данный вид поиска осуществляется при помощи оператора &&, который проверяет пересекаются ли элементы первого массива со вторым массивом.
    В примере это массив ARRAY[5464574, 35436456, 4578779, 3256456] и поле sum.
    SELECT * FROM users WHERE sum && ARRAY[5464574, 35436456, 4578779, 3256456];

    Результат:

    Другие типы операторов вы можете посмотреть на официальном сайте postgres.

Комментариев 3

  1. Офлайн
    Hero 28 июня 2019 14:41
    Здравствуйте. Подскажите как можно сложить 2 массива в sql запросе?

    И заодно как можно значение поля сделать массивом и прибавить его к другому массиву?
  2. Офлайн
    Fixlix 29 июня 2019 17:32
    Цитата: Hero
    Здравствуйте. Подскажите как можно сложить 2 массива в sql запросе?

    И заодно как можно значение поля сделать массивом и прибавить его к другому массиву?

    Вот ответ на ваш первый вопрос. О том как можно выполнить сложение 2х массивов.
    Про сложение значения и массива попробую отписать позже
    1. Офлайн
      Hero 1 июля 2019 08:49
      Спасибо. Ну в целом и этого достаточно.
      Вроде разобрался
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.