代码之家  ›  专栏  ›  技术社区  ›  Loopo

SQL-按排序顺序调用聚合函数

  •  2
  • Loopo  · 技术社区  · 16 年前

    我有一个自定义聚合函数,它用分隔符连接项。 如何调用此函数以确保结果是一个排序列表。

    像sum()这样的聚合函数将具有相同的结果,无论行以何种顺序提供给它。

    我无法在聚合函数本身中轻松对项进行排序,因为排序顺序取决于不同的字段。

    例如:

    product|size_id   | size_string
    --------------------------------
    prod1  |10        | x-small
    prod1  |20        | small
    prod1  |30        | medium
    prod1  |40        | large
    prod1  |50        | x-large
    

    我希望返回一个查询:

    prod1,可从以下网址获得:

    即,按照(大小\ id)顺序连接的大小

    SELECT product,concat_agg(size_string) GROUP BY product;
    

    将返回所需的数据,但不按排序顺序返回。

    目前,我正在使用一个函数以正确的顺序循环大小,并将它们添加到结果中。我怀疑有一种SQL方法可以让子查询生成所需的结果。必须存在其他不可交换的聚合函数。

    1 回复  |  直到 13 年前
        1
  •  4
  •   Amirshk    16 年前

    您可以通过将订单添加到 GROUP_CONCAT 函数(在MySQL下:

    SELECT product, GROUP_CONCAT(size_string ORDER BY size_id SEPERATOR ',')
    GROUP BY product
    

    official help 对于