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
如果你有问题请告诉我
我最近正在尝试使用 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
如果你有问题请告诉我