SQL - перечисляемые типы данных
Пересказ статьи Rubihali. SQL — Repeated Data Types
Перечисляемые типы данных более сложны для запроса, чем обычные типы данных, такие как текст, строка, целые числа или дата/время. Здесь мы рассмотрим эти сложные типы данных на нескольких примерах.
Давайте сначала создадим таблицу с образцом данных. Предположим, что у нас есть данные по игрокам с перечисляемым полем с именем groups, в котором указываются группы матчей, в которых игрок будет принимать участие.
Результаты
Чтобы сделать запрос к перечисляемым данным, мы обычно используем функцию unnest. Давайте посмотрим, как она работает.
При использовании unnest каждое значение извлекается из массива и возвращается в отдельной строке.
Столбцы с перечисляемыми значениями обычно помогают содержать информацию в единственной таблице и избегать соединений, что может оказаться дороже.
Теперь давайте найдем игрока, который играет в группе "worldcup" (на чемпионате мира), с помощью UNNEST.
Наконец, найдем для каждого игрока количество его групп матчей.
Ссылки по теме
1. Типы данных в PostgreSQL: изучаем PostgreSQL с Grant Fritchey
2. Массив и пользовательские типы данных в PostgreSQL
3. Продвинутые возможности PostgreSQL: Руководство
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: Руководство
Обратные ссылки
Автор не разрешил комментировать эту запись
Комментарии
Показывать комментарии Как список | Древовидной структурой