@pavel_the_man

Почему в crosstab нужно указывать VALUES в запросе на выборку?

По ссылке песочница со сводной таблицей через функцию crosstab PostgreSQL 16.

Не могу понять, почему без
, 'VALUES (''кофты''), (''ботинки''), (''пальто'')'

запрос не работает.

В документации не увидел ответа на мой вопрос. Если вы нажмёте ctrl+f и поищете слово VALUES, то найдете 30 упоминаний VALUES как часть предложения INSERT INTO.
А в моем примере VALUES - это часть запроса на выборку. И без этого предложения Posgtres выдает ошибку, хотя в доке про это не сказано.

Просьба объяснить почему так, и ткнуть меня носом в доку, где об этом написано (возможно я пропустил или что-то не догнал).
  • Вопрос задан
  • 45 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
https://www.postgresql.org/docs/current/tablefunc....
The main limitation of the single-parameter form of crosstab is that it treats all values in a group alike, inserting each value into the first available column. If you want the value columns to correspond to specific categories of data, and some groups might not have data for some of the categories, that doesn't work well. The two-parameter form of crosstab handles this case by providing an explicit list of the categories corresponding to the output columns.

crosstab(text, text) вариант не требует именно values. Второй аргумент функции может быть любым запросом, который сгенерирует полный список категорий. Этот вариант crosstab нужен, если первый запрос может возвращать данные не для всех категорий.

С точки зрения синтаксиса, insert .. values - это то же самое, что insert .. select, а values - это частный случай select только списка констант
melkij=> VALUES ('кофты'), ('ботинки'), ('пальто');
column1
---------
кофты
ботинки
пальто
(3 строки)

это самодостаточный запрос. Можно записать как select 'кофты' union all select 'ботинки' union all select 'пальто', но зачем?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы