回答

收藏

PostgresQL SQL:将结果转换为数组

技术问答 技术问答 391 人阅读 | 0 人回复 | 2023-09-14

下面的查询:
6 R; j% u7 u. _/ m" v    SELECT  i_adgroup_id, i_category_id
2 h3 R- j/ G& {, Q* o    FROM adgroupcategories_br
' X) r5 h: f" `    WHERE i_adgroup_id IN
! I7 o& m# ~3 p    (! x6 q; @: t/ d* q/ @9 R. ?
        SELECT i_adgroup_id
9 J- V5 g- Y0 A" o* Z( V) x        FROM adgroupusers_br
$ [+ P8 |  j* ~        WHERE i_user_id = 1037139 c, i1 u  x2 R* j, D; \2 h! }
    )
- s% B6 A9 V5 E    GROUP BY i_adgroup_id, i_category_id;
5 a4 O  n2 Y. R5 P) \给我这样的结果:
3 o" o) t. h" C% |( O4 \    i_adgroup_id integer | i_category_id smallint% S+ c6 n5 B% I4 i& B
    ---------------------|-----------------------
! @5 {+ b9 K8 v( f$ o& ~" ~8 `    15938                | 2. k3 l+ H# h) |, U! M( S
    15938                | 3
9 c% J1 t; r; Q# q3 A! ]6 M    15938                | 4: I$ r$ B( v) L
    15942                | 1
. Y: w& t! ?2 i! g6 T    15942                | 2# ^0 _2 Z7 ]+ ~' K# f
我想要的是这样的结果:
3 D/ P5 g, h9 E    i_adgroup_id integer | i_category_id smallint[]
1 }3 e# K, p' y/ G# u. K0 S9 `    ---------------------|-----------------------
' n2 P" V9 k6 u: Z" k    15938                | { 2, 3, 4 }3 N3 A/ M* P( o0 ?* N2 ~
    15942                | { 1, 2 }5 F  y8 O9 p& t
如何更改原始SQL查询以得到上面的结果?
& Y9 \+ R9 B( X4 B- |               
5 {0 s" ^0 ^, y$ _, e解决方案:
* h. @5 A3 h8 ?& h6 r& w+ m$ R                1 ]  M5 R2 X# A' p) T  N2 r. s

! g% w' F% ?% m9 D( h- O
3 i7 T; F$ F. D2 v                您要使用array_agg,这应该可以工作:
# j! o0 c- \! S, u, E* g2 [SELECT i_adgroup_id, array_agg(i_category_id)
3 n9 F/ }2 Y( P  B3 A4 SFROM adgroupcategories_br, t# M. ?; k1 f( {: ^0 F6 f% G) y
WHERE i_adgroup_id IN# [& F2 R- ^! R/ h" p1 g7 s
(
$ y4 }8 f5 `& r/ b* l& c    SELECT i_adgroup_id
  k& D; L7 ~2 l3 P    FROM adgroupusers_br
8 R, ]( T0 ~1 b# D6 C    WHERE i_user_id = 103713( o7 A8 y) N9 m+ u  U
)
0 |5 F7 v) [! Y* @% o# B5 fGROUP BY i_adgroup_id;
/ z4 Y/ Y" Q4 s; c/ V! L请注意,i_category_id不再存在,GROUP BY因为它正在聚合。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则