Mysql 使用GROUPBY子句时将描述连接在一起
我有两个表“acctg\u invoice”和“acctg\u invoice\u item”,它们是一对多关系。因此,我可以将多个发票项目链接到一个发票 我需要使用“Group By”子句将发票项分组在一起,并使用SUM()函数将与发票相关的发票项金额相加。因为我使用的是“分组依据”,所以“说明”字段只使用最后一项说明 在“acctg\u发票\u项目”中,我存储项目的“说明”。例如,一个项目可能会说“每月租金”,另一个项目可能会说“每月公用事业费”,但这两个项目都属于一个“发票id”,该id来自父表“acctg\U发票” 我想将所有项目“描述”合并成一个长字符串,如“月租金、月公用事业费”等。因此,我的最终结果集只有一行项目显示“金额”和“描述”,但我不知道如何做到这一点 这在SQL中可能吗 我正在使用MySql。提前谢谢 下面是一个示例SQL语句:Mysql 使用GROUPBY子句时将描述连接在一起,mysql,sql,Mysql,Sql,我有两个表“acctg\u invoice”和“acctg\u invoice\u item”,它们是一对多关系。因此,我可以将多个发票项目链接到一个发票 我需要使用“Group By”子句将发票项分组在一起,并使用SUM()函数将与发票相关的发票项金额相加。因为我使用的是“分组依据”,所以“说明”字段只使用最后一项说明 在“acctg\u发票\u项目”中,我存储项目的“说明”。例如,一个项目可能会说“每月租金”,另一个项目可能会说“每月公用事业费”,但这两个项目都属于一个“发票id”,该id来
SELECT sum(b.amount_curr) as amount, b.description
FROM acctg_invoice a, acctg_invoice_item b
WHERE a.acctg_invoice_id = b.acctg_invoice_id
GROUP BY a.acctg_invoice_id
试试这个:
SELECT
SUM(b.amount_curr) amount,
GROUP_CONCAT(b.description) descr
FROM acctg_invoice a INNER JOIN acctg_invoice_item b
ON a.acctg_invoice_id = b.acctg_invoice_id
GROUP BY a.acctg_invoice_id
您可以使用
GROUP\u CONCAT()
aggregate函数进行此操作。下面是一个示例:
SELECT
SUM(b.amount_curr) AS amount,
GROUP_CONCAT(B.description SEPERATOR ', ') AS description
FROM
acctg_invoice A
INNER JOIN acctg_invoice_item B ON
B.acctg_invoice_id = A.acctg_invoice_id
GROUP BY
A.acctg_invoice_id
GROUP\u CONCAT()
aggregate函数还有其他选项,因此您还可以定义它们的连接顺序等。MySQL网站上提供了这些选项。请不要使用隐式SQL'89连接语法。这是一种反模式,请使用显式连接语法。您的查询将更易于维护、调试和理解
SELECT sum(item.amount_curr) as amount
, GROUP_CONCAT(item.description) as descriptions
FROM acctg_invoice inv
INNER JOIN acctg_invoice_item item
ON (inv.acctg_invoice_id = item.acctg_invoice_id)
GROUP BY inv.acctg_invoice_id WITH ROLLUP
如果将带有rollup的添加到group by
子句中,您将在底部得到一个总计
链接
@Johan:你是说我用了JOIN
而不是internaljoin
?如果是的话,我刚刚编辑了我的代码…JOIN工作正常JOIN=internaljoin
,但是如果它是一个内部连接,那么黑白的总是很好的+1@Johan:是的,我同意你的看法,它更容易理解和维护。谢谢你的建议:)