Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用GROUPBY子句时将描述连接在一起_Mysql_Sql - Fatal编程技术网

Mysql 使用GROUPBY子句时将描述连接在一起

Mysql 使用GROUPBY子句时将描述连接在一起,mysql,sql,Mysql,Sql,我有两个表“acctg\u invoice”和“acctg\u invoice\u item”,它们是一对多关系。因此,我可以将多个发票项目链接到一个发票 我需要使用“Group By”子句将发票项分组在一起,并使用SUM()函数将与发票相关的发票项金额相加。因为我使用的是“分组依据”,所以“说明”字段只使用最后一项说明 在“acctg\u发票\u项目”中,我存储项目的“说明”。例如,一个项目可能会说“每月租金”,另一个项目可能会说“每月公用事业费”,但这两个项目都属于一个“发票id”,该id来

我有两个表“acctg\u invoice”和“acctg\u invoice\u item”,它们是一对多关系。因此,我可以将多个发票项目链接到一个发票

我需要使用“Group By”子句将发票项分组在一起,并使用SUM()函数将与发票相关的发票项金额相加。因为我使用的是“分组依据”,所以“说明”字段只使用最后一项说明

在“acctg\u发票\u项目”中,我存储项目的“说明”。例如,一个项目可能会说“每月租金”,另一个项目可能会说“每月公用事业费”,但这两个项目都属于一个“发票id”,该id来自父表“acctg\U发票”

我想将所有项目“描述”合并成一个长字符串,如“月租金、月公用事业费”等。因此,我的最终结果集只有一行项目显示“金额”和“描述”,但我不知道如何做到这一点

这在SQL中可能吗

我正在使用MySql。提前谢谢

下面是一个示例SQL语句:

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:是的,我同意你的看法,它更容易理解和维护。谢谢你的建议:)