回答

收藏

如何删除由array_agg postgres函数生??成的重复项

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

有谁知道如何重写下面的SQL查询以生成仅包含一个名称的结果?(结果按用户分组)。& n0 c7 l  ]" b
查询
' ?3 d" p) m2 V: LSELECT array_to_string(array_agg(CONCAT(u.firstname, ' ', u.lastname)), ', ')) f+ ~: ~0 Q% A1 [4 N1 X; O
FROM log_has_item logitem
: r6 I6 X! o  k  INNER JOIN log log ON log.id = logitem.log_id6 M4 u  I" |& i" Y$ J1 n/ M
  INNER JOIN worker u ON log.worker_id = u.id) K) D0 [* Z9 X! R4 b8 t
WHERE logitem.company_id = 1
  J& w* b7 S3 c. W9 }可执行查询在 sqlfiddle.com, }' I1 E& y* w( Q# Q# ~
可用 。单击“运行SQL”按钮,您将得到结果,其中两次包含
9 \, v$ a  x1 ^+ U3 L1 z# O6 aFrantisek Smith8 G+ b1 U6 ~  s5 [
                7 m! _' T9 d& j
解决方案:/ x. }  L& P0 G( R7 E
               
0 ], n0 i; ^/ L* B* o2 a. r0 i4 C" {2 m: f5 V

4 q; H! }1 r7 Y: }3 Y7 @( k                您可以在distinct内部使用关键字array_agg:
- h( \1 W3 Q$ s# bSELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT CONCAT(u.firstname, ' ', u.lastname)), ', ')3 @9 i. t2 J# y% y/ m" J* }0 F; A
FROM log_has_item logitem
# S# `! ]; d- R  INNER JOIN log log ON log.id = logitem.log_id, J' e; l" a$ Q# t  G% P
  INNER JOIN worker u ON log.worker_id = u.id
  ^( x+ S4 E3 z4 g+ w- d7 RWHERE logitem.company_id = 1
" U2 N* Y' _% a. K# ?: xSQLFiddle与这个例子
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则