Как сделать grouping?

Как сделать группировку?
Делаю вот такой запрос:
select type, cost, sum(cost) as balance from expenses e 
where plan_date = '2023-12-04'
group by rollup (type,cost);

Получаю вот такой результат:
type; cost;             balance
1	£400.00		£400.00
1	£450.00		£450.00
1	£900.00		£900.00
1	£1,300.00	£1,300.00
1	£2,100.00	£2,100.00
1	NULL		£5,150.00

А хотелось бы что-то вроде вот такого:
type; cost;             balance
1	£400.00		£400.00
1	£450.00		£450.00
1	£900.00		£900.00
1	£1,300.00	£1,300.00
1	£2,100.00	£2,100.00
1	Subtotal:	£5,150.00

В мускул это делается следующим образом, но в потсгри перенести не получается, пишет что неправильно использую функцию.
select 
IF(GROUPING(type ), 'Subtotal', type ) AS type, 
IF(GROUPING(cost), 'Subtotal', cost ) AS costs,
.....
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Было бы желание!
Приводим значения к типу text и вуаля!
select 
    coalesce(type::text, 'total by type') type, 
    coalesce(cost::text, 'total') cost, 
    sum(cost) as balance 
from expenses e 
where plan_date = '2023-12-04'
group by rollup (type,cost);

Проверить: https://sqlize.online/s/VH

Так немного лучше: https://sqlize.online/s/XH
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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