我想了解Postgresql 9.3中的array_agg函數。我爲每個可能有興趣參與的人提供了一個有趣的例子。Postgresql 9.3 - array_agg挑戰
1980年代美國電影的任何粉絲都可能熟悉出現在許多熱門電影中的「小丑包」。通過使用維基百科關於小狗包裝電影的信息,我創建了表格,當它們連接在一起時,可以告訴我們誰與誰共事 - 如果我們有正確的查詢!
/*
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);
查詢:SHOW的不同列表誰的小子組的每個成員一起工作,通過名字在兩列有序
Name Worked With
----------------------------------------------------------------------------------------------------------------
Emelio Estevez | Emilio Estevez, Anthony Michael Hall, Rob Lowe, Andrew McCarthy, Demi Moore, Judd Nelson, Molly Ringwald, Ally Sheedy
*/
我破碎的查詢:
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
旁註:你可能想'string_agg()',而不是array_to_string的'組合()'和'ARRAY_AGG() ' –
我更加簡潔的輸出 –