【问题标题】:SQL - call aggregate function in sort orderSQL - 按排序顺序调用聚合函数
【发布时间】:2013-01-30 02:35:45
【问题描述】:

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

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

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

例如:

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

我想返回一个查询:

prod1,适用于: x-小,小,中,大,x-大

即按 (size_id) 顺序连接的尺寸

SELECT product,concat_agg(size_string) GROUP BY product;

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

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

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以在GROUP_CONCAT 函数中添加 order by(在 MySQL 下:

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

    这是official helpGROUP_CONCAT

    【讨论】:

    • 我不知道 GROUP_CONCAT 有 ORDER BY。谢谢!
    • 实际上我使用的是postgres,它没有GROUP_CONCAT,但有一个“数组”功能,可以以类似的方式使用。谢谢你让我走上正轨。 BTW 应该是“ORDER BY size_id”
    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2019-03-09
    • 2017-01-24
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多