【问题标题】:Is it possible to GROUP_CONCAT a result set as a new column? [duplicate]是否可以将结果集 GROUP_CONCAT 作为新列? [复制]
【发布时间】:2023-04-06 20:26:01
【问题描述】:

我有一个结果集,格式为:

category name  description author
ABC      Lorem Ipsum       Dolor
DEF      Foo   Bar         Baz

我有第二个结果集,格式为:

category product
ABC      Plane
DEF      Car
ABC      Boat
GHI      Truck

我希望最终结果如下所示:

category name  description author productlist
ABC      Lorem Ipsum       Dolor  "Plane, Boat"
DEF      Foo   Bar         Baz    "Car"

我一直在尝试在第二个结果集上使用 GROUP_CONCAT 并将其按类别加入第一个结果集以获取列 productlist,但未能成功创建正确的查询。

这样的事情可能吗?

我正在使用 MariaDB。

性能不是主要问题,因为结果集往往很小。

这是我得到的最接近的,

SELECT `NAME`, `description`, `author`, `category`, ProductList
FROM (long query) q
LEFT JOIN (
    SELECT GROUP_CONCAT(b.product ORDER BY b.product SEPARATOR ', ') AS 
        ProductList, ObjectCategory FROM SOME_TABLE a, SOME_OTHER_TABLE b 
    WHERE ObjectCategory = 'ABC' ORDER BY product
) q2
ON q.category = q2.ObjectCategory

但上述内容一次仅适用于一个硬编码类别(在上述情况下为“ABC”)。

【问题讨论】:

    标签: sql mariadb


    【解决方案1】:

    是的,很有可能。聚合之前加入:

    select r1.*, r2.product_list
    from results1 r1 left join
         (select r2.category, group_concat(product) as product_list
          from results2 r2
          group by r2.category
         ) r2
         on r2.category = r1.category;
    

    【讨论】:

      猜你喜欢
      • 2016-03-22
      • 2019-08-03
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 2011-03-07
      • 2011-12-25
      • 1970-01-01
      相关资源
      最近更新 更多