回答

收藏

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

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

有谁知道如何重写下面的SQL查询以生成仅包含一个名称的结果?(结果按用户分组)。
+ h4 w9 [. _8 T1 e查询4 q# {7 }) n7 H' Q1 Y
SELECT array_to_string(array_agg(CONCAT(u.firstname, ' ', u.lastname)), ', ')
, `, h& Y/ w; T) b! b# sFROM log_has_item logitem
& c) u% S; |5 F2 _. B  INNER JOIN log log ON log.id = logitem.log_id0 a: H: {% J8 l2 c2 t  |, o- F' v
  INNER JOIN worker u ON log.worker_id = u.id6 G: M' {9 U$ e1 c
WHERE logitem.company_id = 1. `; p* r! j" H* Q
可执行查询在 sqlfiddle.com5 A: e  T$ M/ V0 s- d5 q' k
可用 。单击“运行SQL”按钮,您将得到结果,其中两次包含3 i3 H4 ~0 J4 w) Q& i& D
Frantisek Smith
# k; ~3 `9 L7 B* T2 c! n1 h# |                3 g" L, I) I: Z3 [+ d/ h
解决方案:8 }! u0 r: X% u8 e- k/ \+ J
                9 q5 m" B. \6 P* q! W, A9 h  {5 N

3 W. E& }2 @' V& e+ M, ^) ^9 U( ~
                您可以在distinct内部使用关键字array_agg:
( _1 E1 q8 w! aSELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT CONCAT(u.firstname, ' ', u.lastname)), ', ')3 m- c+ L+ `3 z+ k; _/ k" `. q
FROM log_has_item logitem
# R9 t, N" ?% l& Z  INNER JOIN log log ON log.id = logitem.log_id
$ M4 V& P, m8 U7 Y+ [$ e; I+ ]  INNER JOIN worker u ON log.worker_id = u.id
$ C, O& V6 `: P" NWHERE logitem.company_id = 16 T8 T. T- b. n* |" Y3 r7 f+ y
SQLFiddle与这个例子
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则