2017-11-08 6 views
0

최근에 GROUP_CONCAT를 사용하여 집계를 수행하려고합니다. 각 유사한 값에 대해 모든 중복 항목이 쿼리가됩니다.Group_Concat with duplicates

invoice_number 열을 기반으로 모든 비슷한 항목을 쿼리하고 문자열에서 group_concat을 사용하고 싶습니다.

그러나 발견 된 첫 번째 값과 group_concat 만 검색 할 수 있습니다. 동일한 인보이스 번호를 공유하는 항목의 양을 기반으로 여러 연결 문자열이 필요합니다.

송장 테이블

|item_id |invoice_number |amount |currency| 
|-----------|---------------|-------|--------| 
|379406  |INV00000046 |52286 |USD  | 
|567501  |INV00000046 |52286 |USD  | 
|102448  |INV00000390 |0  |USD  | 
|1975291 |INV00000390 |0  |USD  | 
|62436  |INV00000390 |0  |USD  | 
|4067502 |INV00000346 |35112 |EUR  | 
|5174950 |INV00000346 |35112 |EUR  | 

원하는 결과

|item_id |related items   |amount |currency| 
|-----------|-----------------------|-------|--------| 
|379406  |379406,567501   |52286 |USD  | 
|567501  |379406,567501   |52286 |USD  | 
|102448  |102448,1975291,62436 |0  |USD  | 
|1975291 |102448,1975291,62436 |0  |USD  | 
|62436  |102448,1975291,62436 |0  |USD  | 
|4067502 |4067502,5174950  |35112 |EUR  | 
|5174950 |4067502,5174950  |35112 |EUR  | 

내가 쓴 쿼리 :

SELECT 
    item_id, 
    invoice_number, 
    GROUP_CONCAT(item_id) as shared_item_ids, 
    ROUND(AVG(amount)/100,2) as invoice_amount, 
    currency 
FROM 
    invoices  
GROUP BY 
    invoice_number, 
    currency 
01

내 테이블

답변

0

그냥 invoice_number를 키로 사용하여 테이블을 자체에 가입 시키십시오.

SELECT 
    invoices.item_id, 
    invoices.invoice_number, 
    GROUP_CONCAT(related.item_id) as shared_item_ids, 
    ROUND(AVG(amount)/100,2) as invoice_amount, 
    currency 
FROM invoices 
JOIN invoices related ON related.invoice_number = invoices.invoice_number 
GROUP BY invoices.item_id 
+0

을 알려줍니다. –

+0

죄송합니다. 그룹별로 (item_id별로 그룹화해야합니다.) – rlanvin

+0

@rlanvin 내 대답과 다른 점은 무엇입니까? –

0

이 SQL을 사용하면 도움이되기를 바랍니다.

SELECT invoices.item_id, 
ROUND(AVG(invoices.amount)/100,2) AS invoice_amount, 
invoices.currency, GROUP_CONCAT(relation_table.item_id) AS related items 
FROM invoices 
LEFT JOIN invoices relation_table ON 
relation_table.invoice_number = invoices.invoice_number 
GROUP BY invoices.item_id 

당신은 문제가있는 경우 다음 슬프게도 내가 행에 두 번 일어나는 GROUP_CONCAT을 받고, 각각의이 같은 조합 ITEM_ID 가지고 있지 않다 나에게

+0

불행히도, 이것은 내가 염두에 두었던 것이 아닙니다. 같은 송장 번호를 공유하는 item_ids의 group_concat 대신 invoice_numbers의 group_concat가 나타납니다. 8 –

+0

분만 기다려주세요. –

+0

@HeberBrandao 지금 확인하십시오. –