Group_Concat 重复

Group_Concat with duplicates

我最近正在尝试使用 GROUP_CONCAT 完成聚合,其中,对于每个相似的值,我都查询了所有重复项。

基于列invoice_number,我想查询所有相似的项目,并group_concat他们在一个字符串中。

但是,我只能检索找到的第一个值和 group_concat 它们。根据共享相同发票编号的项目数量,我真的需要有多个类似串联的字符串。

这是我的 table:

发票table

|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

只需将 table 与其自身连接起来,使用 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

试试这个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

如果你有问题请告诉我