2014-11-13 2 views
0

세 개의 테이블이 있습니다. 리드, 메모 및 사용자.세 번째 열에서 prepended 값을 가진 Aggragate 내부 조인 열

leads 
- id 
- name 

notes 
- id 
- lead_id 
- content 
- user_id 

users 
- id 
- name 
내가
Lead name | Notes 
John  | Mary - Note 1 ### John - Note 2 

첫 번째 열은 간단하다 두 개의 열

새로운 테이블을 반환하는 쿼리를 생성하고자하는

. 모든 리드에는 이름이 있습니다. 그러나 두 번째 칼럼은 까다 롭습니다. 필자는 노트의 작성자 이름 앞에 추가하여 모든 노트를 단일 열에 집계하려고합니다.

집계 된 메모가있는 두 번째 열을 사용하여 쿼리를 작성했습니다.

SELECT leads.name AS name, 
     string_agg(notes.content, ' ### ') AS leads_notes, 
FROM leads 
INNER JOIN notes ON notes.lead_id = leads.id 
GROUP BY leads.id 

그러나 노트의 작성자 이름 (users.name) 내가 어떻게 조회 할 수 없습니다.

답변

1

인용문은 오해의 소지가 있습니다. 작은 따옴표는 식별자가 아닙니다.
또한 조인이 꼬였습니다. 사용자를 리드에 직접 참여시킬 수 없습니다. leads

SELECT ls.name 
     , string_agg(concat_ws(' - ', u.name, n.content) 
        , ' ### ') AS leads_notes 
FROM leads l 
JOIN notes n ON n.lead_id = l.id 
JOIN users u ON u.id = n.user_id 
GROUP BY l.id; 

기본적인 구조를 고정 ... 더 user_id 없다.

연결하여 name

하고 string_agg() (여러 값 행에서 )로 집계 이전 concat_ws()합니다 (같은 행에서 여러 값)와 content. users.namenotes.contentNOT NULL을 정의

경우, 당신은 대신에 연결할 수 있습니다 :

u.name || ' - ' || n.content 

세부 사항 : 당신은 또한 리드 당 요소를 주문 할 수 있습니다

비 임의적 방식으로 :

string_agg(... ORDER BY u.name, u.id)
+0

감사합니다. Erwin! – tomazzlender

관련 문제