【问题标题】:Concatenating a description together when using a Group By Clause使用 Group By 子句时将描述连接在一起
【发布时间】:2011-11-13 07:41:18
【问题描述】:

我有两个表“acctg_invoice”和“acctg_invoice_item”,是一对多的关系。所以我可以将多个发票项目链接到一张发票​​。

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

在“acctg_invoice_item”中,我存储了项目的“描述”。例如,一个项目可能是“月租”,而另一个项目可能是“月租公用事业”,但这两个项目都属于一个来自父表“acctg_invoice”的“invoice_id”。

我想将所有项目“描述”合并为一个长字符串,例如“月租、月度公用事业”等,这样我的最终结果集将只有一个显示“金额”的行项目,并且“描述”,但我不知道该怎么做。

这在 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

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

    • @Johan:你的意思是我用的是JOIN而不是INNER JOIN?如果是这样,我刚刚编辑了我的代码...
    • 连接工作正常JOIN = INNER JOIN,但它总是很高兴有它在黑色和白色,它是一个内在。 +1
    • @Johan:是的,我同意你的观点,它更容易理解和维护。谢谢你的建议:)
    【解决方案2】:

    您可以为此使用GROUP_CONCAT() 聚合函数。这是一个例子:

    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_CONCAT() 聚合函数还有其他选项,因此您还可以定义连接它们的顺序等。The documentation 可在 MySQL 网站上找到。

    【讨论】:

      【解决方案3】:

      请不要使用隐式 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
      

      如果您将 with rollup 添加到您的 group by 子句中,您将在底部获得总计。

      链接
      http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
      http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多