Как сруппировать частично совпадающие значения в SQL?
Есть таблица:
table
x y
500 1.0
400 2.3
101 4.1
select
case when x in (500,400,101) then 'three'
case when x in (500,400) then 'one'
else '' end as "group",
sum (y) as "sum",
from table
group by
"group"
Можно было бы добавить ещё одну таблицу групп с полями x и group. Заджойнить вашу table с новой таблицей по полю x и сгруппировать по полю group. В вашем варианте в какой-то момент case может стать очень сложным и не читаемым, адля добавления новой группы нужно всегда запрос дописывать, а это не гуд.
select
case
when x in (500,400) then 'в том числе'
when x in (500,400,101) then 'всего'
else '' end as "итог",
sum (y) as "сумма"
from public.table
group by
case
when x in (500,400) then 'в том числе'
when x in (500,400,101) then 'всего'
else '' end
timur_gis, в таблицу с группами можно положить наименования категорий, как вам нужно, например:
Таблица Groups
Id Group x
1 'всего' 101
2 'всего' 400
3 'всего' 500
4 'в том числе' 400
5 'в том числе' 500
И запрос тогда, что-то вроде этого:
Select g.Group as "итог",
sum(t.y) as "сумма"
From groups g
Join table t
On g.x = t.x
Group by g.Group