我有3個表採用這種結構:PostgreSQL的:查詢並返回數組從3個相關的表
城市
id city
1 London
2 Madrid
3 Paris
用戶
id name
1 Bob
2 John
3 Laura
cities_users(此錶鏈接兩個以前的表)
id city_id user_id
1 1 1
2 2 2
3 1 3
4 3 3
這樣我們可以很容易地引用用戶住在哪裏。 例如在這裏,我們看到用戶1(鮑勃)住在倫敦,用戶3(勞拉)住在倫敦和巴黎。
我的問題是:我應該做哪些查詢獲得這種期望的結果?
city_id city number_users users
1 London 2 Bob,Laura
2 Madrid 1 John
3 Paris 1 Laura
計數部分我覺得我有它 SELECT c.id, c.city, coalesce (aux.c_count,0) AS number_users FROM cities c LEFT JOIN (SELECT city_id, count(*) c_count FROM cities_users GROUP BY city_id) aux ON aux.city_id = c.id;
但陣列的部分是一個我不能老是設法解決。
我創建了一個:string_agg(expression, delimiter)
或array_agg(expression)
由逗號分隔值,如果你真的想文本的陣列,而不是一個文本字符串:DB fiddle for this example
絕對不可思議!,無論是在效率和回答速度。我仍然是SQL的初學者,並且非常想學習......現在我不被允許upvote,但是當我可以的時候,我會回到這篇文章並肯定地讚揚你。謝謝! – Bob
不客氣,特別是有這樣一個很好的問題,也包括小提琴測試答案。我相信你仍然可以接受答案,所以其他尋找未答覆問題的成員將不會看到這個答案。 –