Добрый день всем.
Есть команда
select supplier, car_category, count(car_type) from mytable group by 1,2 order by 1,2;
, которая возвращает требуемую мне таблицу
supplier | car_category | count
----------+--------------+-------
Avis | Compact | 4
Avis | Fullsize | 2
Avis | Hatch | 6
Avis | Intermediate | 4
Avis | Sedan | 6
Avis | Standard | 2
Avis | SUV | 6
Budget | Compact | 8
Budget | Fullsize | 4
Budget | hatch | 2
Budget | Hatch | 2
Budget | Hatchback | 4
Budget | Intermediate | 8
Budget | Sedan | 4
Budget | Standard | 4
Europcar | Compact | 5
Europcar | Fullsize | 5
Europcar | Intermediate | 15
Europcar | Standard | 10
(19 rows)
Задача - написать функцию, которая бы возвращала то же самое. Моя попытка:
create or replace function pivot_car_type(a text, b text, c text)
returns table(supplier text, category text, car_type_qty bigint) as
$$
begin
return query
select a,b,count(c) from avis.rateshop group by 1,2 order by 1,2;
end;
$$
language 'plpgsql';
Но при вызове
select * from pivot_car_type(supplier, car_category, car_type);
получаю ответ вида:
supplier | category | car_type_qty
----------+--------------+--------------
supplier | car_category | 101
(1 row)
где 101 - это количество записей в таблице.
Т.е. получается, что функция использует команду вида:
select 'supplier', 'car_category', count('car_type') from mytable group by 1,2 order by 1,2;
а не
select supplier, car_category, count(car_type) from mytable group by 1,2 order by 1,2;
Подскажите, что я делаю не так, пожалуйста :)