Postgresql 9.3'teki array_agg işlevini anlamaya çalışıyorum. Katılmaya ilgi duyan herkes için eğlenceli bir örnek oluşturdum. 1980'lerden Amerikan filmlerinin hayranları, bir çok hit filmde yer alan "velet paketi" ile tanışabilirler. Wikipedi'de brat paketi filmleri hakkındaki bilgileri kullanarak, bir araya geldiğinde, birbirimizi kiminle çalıştığını söyleyebiliriz - eğer doğru sorguya sahipsek!Postgresql 9.3 - array_agg challenge
/*
See: http://en.wikipedia.org/wiki/Brat_Pack_(actors)
*/
CREATE TABLE actor(
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);
insert into actor(name) values ('Emilio Estevez'),('Anthony Michael Hall'),('Rob Lowe'),('Andrew McCarthy'),('Demi Moore'),('Judd Nelson'),('Molly Ringwald'),('Ally Sheedy')
CREATE TABLE movie(
id SERIAL PRIMARY KEY,
title VARCHAR(200)
);
insert into movie(title) values ('The Outsiders'),('Class'),('Sixteen Candles'),('Oxford Blues'),('The Breakfast Club'),('St. Elmos Fire'),
('Pretty in Pink'),('Blue City'),('About Last Night'),('Wisdom'), ('Fresh Horses'),('Betsys Wedding'),('Hail Caesar');
CREATE TABLE movie_brats(
id SERIAL PRIMARY KEY,
movie_id INT REFERENCES movie(id),
actor_id INT REFERENCES actor(id)
);
insert into movie_brats(movie_id, actor_id) values (1,1),(1,3),(2,3),(2,4),(3,2),(3,7),(4,3),(4,8),(5,1),(5,2),(5,6),
(5,7),(5,8),(6,1),(6,3),(6,4),(6,5),(6,6),(6,8),(7,4),(7,7),(8,6),(8,8),(9,3),(9,5),(10,1),(10,5),(11,4),(11,7),
(12,7),(12,8),(13,2),(13,6);
Sorgu: Her iki sütuna da ismen sipariş velet paketinin her üye ile çalıştı ayrı bir liste, göster
Name Worked With
----------------------------------------------------------------------------------------------------------------
Emelio Estevez | Emilio Estevez, Anthony Michael Hall, Rob Lowe, Andrew McCarthy, Demi Moore, Judd Nelson, Molly Ringwald, Ally Sheedy
*/
Benim kırık sorgusu:
select a1.name, array_to_string(array_agg(a2.name),', ') as Co_Stars
from actor a1, actor a2, movie m, movie_brats mb
where
m.id = mb.movie_id
and a1.id = mb.actor_id
and a2.id = mb.actor_id
group by a1.id
Bir yan not: muhtemelen '' string_agg() istediğiniz yerine array_to_string 'bir kombinasyonundan()' ve 'array_agg() ' –
I İkinci sorguyu daha özlü çıktıyla güncelleştirin –