postgresql - 将子查询结果列合并为一个列,然后在 ORDER BY 中使用

标签 postgresql ruby-on-rails-3.2

我想执行这样的查询:

SELECT 
    folders.*, 
    (SELECT 
        files.filename 
     FROM 
        files 
     WHERE 
        files.folder_id = folders.id 
    ) 
    as files 
FROM 
        folders 
ORDER BY 
    files[column name of filename]

子查询可能会给出不止 1 个结果,所以我想将结果合并到一个单列文件名中。

我正在使用 Postgres。 我将 Rails 添加为标签,因为您可能会建议一些可以处理此问题的 Rails 魔法。

最佳答案

这将创建文件夹中所有文件的逗号分隔列表:

select folders.*,
       (SELECT string_agg(files.filename, ',')
        FROM files 
        WHERE files.folder_id = folders.id) as files
from folders

如果您需要在逗号分隔列表中对文件名进行排序,您可以在较新的 Postgres 版本中使用排序依据:

select folders.*,
       (SELECT string_agg(files.filename, ',' order by files.filename)
        FROM files 
        WHERE files.folder_id = folders.id) as files
from folders

不过我不确定我是否理解“并在 ORDER BY 中使用它”的要求。如果该列包含多个文件,您如何期望总结果的正确顺序?您需要向我们展示一些样本输出(基于一些样本数据)。

关于postgresql - 将子查询结果列合并为一个列,然后在 ORDER BY 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14933713/

相关文章:

javascript - 如何在 ruby​​ on rails 中完整打印其 css 的页面?

sql - 对查询的输出应用 DENSE_RANK()

java - 如何在 JOOQ 的 `ExecuteListener` 中安全地执行自定义语句?

sql - 无需手动删除创建的表即可运行查询

macos - SVN 无法在全新的 Mac OSX 安装上运行

java - 为什么从生成的 jar 中找不到 jdbc 驱动程序?

ruby-on-rails - Ruby 中的 bool 值

ruby-on-rails - 构建和存储复杂的 SQL 查询以供以后编辑

Ruby:从阿拉伯字符解析日期?

android - 保护 REST API 供 Android 客户端使用