Odp: Kolumna kótra tryzma w sobie tabelę
proponuję takie rozwiązanie
with tabela (wlasciciel,zwierze,wiek) as (values
('tomek'::varchar,'pies'::varchar,interval '2' year)
,('tomek','kot',interval '2' year)
,('tomek','pająk',interval '3' month)
,('alojzy','ślimak',interval '2' month)
,('alojzy','komar',interval '4' day)
,('alojzy','mucha',interval '3' day)
,('amanda','słoń',interval '20' year)
,('amanda','żyrafa',interval '30' year)
,('amanda','hipopotam',interval '15' year))
select wlasciciel,array_agg ((zwierze,wiek))
from tabela
group by wlasciciel
order by wlasciciel
Odp: Kolumna kótra tryzma w sobie tabelę
Odp: Kolumna kótra tryzma w sobie tabelę
Odp: Kolumna kótra tryzma w sobie tabelę
Odp: Kolumna kótra tryzma w sobie tabelę
Ad 1 - to faktycznie kwestia wersji bazy danych ja pracuje na 9.2
Ad 2 - ja tworze tabelę rekordów typu "zw" po tu używam cast-a. Robię to po to by potem wykorzystywać nazwy z tego typu rekordu tak jak napisałeś w punkcie 3
Napisz mi o co dokładnie ci chodzi gdy piszesz "Bo zależy mi na moim sposobie" bo chyba trochę się zapętliłeś, może warto pomyśleć jak zrobić to prościej jeśli np potrzebny ci tylko wykaz pierwsze zwierzę i jego wiek dla każdego właściciela to można to zrobić i łatwiej i wydajniej
Odp: Kolumna kótra tryzma w sobie tabelę
tu masz drugą wersję tego samego powinna chodzić na 8.4
drop type if exists zw;
create type zw as(
gatunek varchar,
wiek interval);
with t1(wlasciciel, zwierze, wiek)
as (values ('tomek'::varchar,'pies'::varchar,interval '2' year),
('tomek','kot',interval '2' year),
('tomek','pająk',interval '3' month),
('alojzy','ślimak',interval '2' month),
('alojzy','komar',interval '4' day),
('alojzy','mucha',interval '3' day),
('amanda','słoń',interval '20' year),
('amanda','żyrafa',interval '30' year),
('amanda','hipopotam',interval '15' year),
('amanda','nosorożec',interval '45' year))
select d.wlasciciel ,array(select cast ((zwierze,wiek) as zw) from t1 where t1.wlasciciel=d.wlasciciel order by zwierze,wiek) as zwierzaki, d.zwierze,d.wiek from (
select wlasciciel , zwierze, wiek, row_number() over(partition by wlasciciel order by zwierze,wiek) lp from t1
) d where d.lp=1
order by d.wlasciciel
Odp: Kolumna kótra tryzma w sobie tabelę
Odp: Kolumna kótra tryzma w sobie tabelę
Odp: Kolumna kótra tryzma w sobie tabelę
poprawka do kroku 1 - tak będzie chodziło na wersji 8.4 z sortowaniem i z wykorzystaniem funkcji array_agg
create or replace view zwierzaki_v as
with t1(wlasciciel, zwierze, wiek)
as (values ('tomek'::varchar,'pies'::varchar,interval '2' year),
('tomek','kot',interval '2' year),
('tomek','pająk',interval '3' month),
('alojzy','ślimak',interval '2' month),
('alojzy','komar',interval '4' day),
('alojzy','mucha',interval '3' day),
('amanda','słoń',interval '20' year),
('amanda','żyrafa',interval '30' year),
('amanda','hipopotam',interval '15' year),
('amanda','nosorożec',interval '45' year))
select d.wlasciciel ,array_agg(cast ((zwierze,wiek) as zw)) as zwierzaki
from (select wlasciciel, zwierze, wiek from t1 order by wlasciciel, zwierze, wiek) d group by d.wlasciciel