簡體   English   中英

如何刪除使用 array_agg postgres 函數生成的重復項

[英]How to remove duplicates, which are generated with array_agg postgres function

有沒有人知道如何重寫以下 SQL 查詢以生成結果,該查詢僅包含一次名稱? (結果按用戶分組)。

查詢

SELECT array_to_string(array_agg(CONCAT(u.firstname, ' ', u.lastname)), ', ')
FROM log_has_item logitem
  INNER JOIN log log ON log.id = logitem.log_id
  INNER JOIN worker u ON log.worker_id = u.id
WHERE logitem.company_id = 1

可執行查詢在sqlfiddle.com可用 單擊 Run SQL 按鈕,您將得到結果,其中包含Frantisek Smith兩次

您可以在array_agg內使用distinct關鍵字:

SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT CONCAT(u.firstname, ' ', u.lastname)), ', ')
FROM log_has_item logitem
  INNER JOIN log log ON log.id = logitem.log_id
  INNER JOIN worker u ON log.worker_id = u.id
WHERE logitem.company_id = 1

SQLFiddle與這個例子

無需使用ARRAY_TO_STRING(ARRAY_AGG(當一個簡單的STRING_AGG將執行如下操作時( 此處提供小提琴代碼):

--
-- Simplified
--

SELECT
  DISTINCT
  STRING_AGG
  (
    DISTINCT CONCAT(w.firstname, ' ', w.lastname), ', '
  ) AS "The workers"
FROM log_item li
INNER JOIN log l ON li.log_id = l.id 
INNER JOIN worker w ON l.worker_id = w.id
WHERE li.company_id = 1;

結果:

                The workers
Frantisek Smith, Peter Duff

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM