Skip to content

SQL - перечисляемые типы данных

Пересказ статьи Rubihali. SQL — Repeated Data Types


Перечисляемые типы данных более сложны для запроса, чем обычные типы данных, такие как текст, строка, целые числа или дата/время. Здесь мы рассмотрим эти сложные типы данных на нескольких примерах.
Давайте сначала создадим таблицу с образцом данных. Предположим, что у нас есть данные по игрокам с перечисляемым полем с именем groups, в котором указываются группы матчей, в которых игрок будет принимать участие.

CREATE TABLE players (player_id INTEGER, team_name text, match_groups text[]);

INSERT INTO players VALUES
(1, 'champion', Array['test', 't20', 'worldcup']),
(2, 'champion', Array['test', 't20']),
(3, 'champion', Array['test', 'worldcup']);


Результаты

Чтобы сделать запрос к перечисляемым данным, мы обычно используем функцию unnest. Давайте посмотрим, как она работает.

Select player_id, team_name, match_group from players, UNNEST(match_groups) match_group;



При использовании unnest каждое значение извлекается из массива и возвращается в отдельной строке.

Столбцы с перечисляемыми значениями обычно помогают содержать информацию в единственной таблице и избегать соединений, что может оказаться дороже.

Теперь давайте найдем игрока, который играет в группе "worldcup" (на чемпионате мира), с помощью UNNEST.

Select player_id, team_name, match_group from players, UNNEST(match_groups) as match_group WHERE match_group = 'worldcup';




Наконец, найдем для каждого игрока количество его групп матчей.

Select player_id, count(match_group) FROM players, 
UNNEST(match_groups) as match_group group by player_id ORDER by player_id;



Ссылки по теме

1. Типы данных в PostgreSQL: изучаем PostgreSQL с Grant Fritchey
2. Массив и пользовательские типы данных в PostgreSQL
3. Продвинутые возможности PostgreSQL: Руководство

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.