如何删除由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与这个例子 |
|
|
|
|
|