保留 string_agg 内部的不同顺序

2024-03-06

Mysql函数:

with recursive locpais as (
    select l.id, l.nome, l.tipo tid, lp.pai
    from loc l
    left join locpai lp on lp.loc = l.id
    where l.id = 12554
    union
    select l.id, l.nome, l.tipo tid, lp.pai
    from loc l
    left join locpai lp on lp.loc = l.id
    join locpais p on (l.id = p.pai)
)
select * from locpais

gives me

12554 |     PARNA Pico da Neblina | 9 | 1564
12554 |     PARNA Pico da Neblina | 9 | 1547
 1547 |  São Gabriel da Cachoeira | 8 | 1400
 1564 | Santa Isabel do Rio Negro | 8 | 1400
 1400 |                 RIO NEGRO | 7 |  908
  908 |          NORTE AMAZONENSE | 6 |  234
  234 |                  Amazonas | 5 |  229
  229 |                     Norte | 4 |   30
   30 |                    Brasil | 3 |

这是一个地方的等级制度。 “PARNA”代表“国家公园”,该公园涵盖两个城市:São Gabriel da Cachoeira 和 Santa Isabel do Rio Negro。因此它出现了两次。

如果我将最后一行更改为

select string_agg(nome,', ') from locpais

I get

“帕纳皮科达内布利纳,帕纳皮科达内布利纳,圣加布里埃尔达 Cachoeira, Santa Isabel do Rio Negro, RIO NEGRO, NORTE AMAZONENSE, 亚马逊、北部、巴西”

除了双“PARNA Pico da Neblina”之外,这几乎没问题。所以我尝试:

select string_agg(distinct nome, ', ') from locpais

但现在我明白了

“亚马逊、巴西、北部、NORTE AMAZONENSE、帕纳皮科达内布利纳、里约热内卢 NEGRO、Santa Isabel do Rio Negro、São Gabriel da Cachoeira”

这是不正常的。我正在尝试添加一个order by在 - 的里面string_agg,但还无法使其发挥作用。给出了表的定义here https://stackoverflow.com/q/35702246/1086511.


正如您所发现的,您不能合并DISTINCT and ORDER BY如果您不首先按不同的表达式排序:

  • 总体而言:

    如果除了 order_by_clause 之外还指定了 DISTINCT,则所有 ORDER BY 表达式必须与聚合的常规参数匹配;也就是说,您无法对未包含在 DISTINCT 列表中的表达式进行排序。 https://www.postgresql.org/docs/current/static/sql-expressions.html#SYNTAX-AGGREGATES

  • 也不在选择中:

    DISTINCT ON 表达式)必须与最左边的 ORDER BY 表达式匹配。 https://www.postgresql.org/docs/current/static/sql-select.html#SQL-DISTINCT

不过可以使用类似的东西

array_to_string(arry_uniq_stable(array_agg(nome ORDER BY tid DESC)), ', ') 

在函数的帮助下arry_uniq_stable删除数组中的重复项而不改变它的顺序,就像我在中给出的例子一样https://stackoverflow.com/a/42399297/5805552 https://stackoverflow.com/a/42399297/5805552

请小心使用ORDER BY实际上给出确定性结果的表达式。根据你给出的例子,tid单独是不够的,因为存在不同的重复值 (8)nome.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保留 string_agg 内部的不同顺序 的相关文章

  • 枚举字段的自定义排序顺序

    是否可以将 JPA 中的字母排序更改为自定义排序 我在列中有这些数据division BRONZE SILVER GOLD DIAMOND 我已将其映射到实体字段 public enum Division BRONZE SILVER GOL
  • 使用 pyspark 连接 PostgreSQL

    我正在尝试使用 pyspark 连接到数据库 并且使用以下代码 sqlctx SQLContext sc df sqlctx load url jdbc postgresql hostname database dbtable SELECT
  • 在 MySQL 中选择不同的对

    我想选择 A 列和 B 列中具有相同值的行 例如 如果我的表是 A B 1 2 3 4 1 2 4 5 输出应该是 A B 1 2 A SELECT DISTINCT A B FROM table 选择表中的所有值 B SELECT DIS
  • Django 全文搜索优化 - Postgres

    我正在尝试利用 Django v2 1 和 Postgres 9 5 创建一个地址自动完成功能的全文搜索 但性能目前不适合自动完成 我不明白逻辑我得到的绩效结果背后 就信息而言 该表相当大 有 1400 万行 我的型号 from djang
  • PostgreSQL 对 string\varchar 的各种清理

    我必须通过以下方式清理一些 varchar 删除特殊字符 例如 来自封闭列表 我已经成功地通过大量使用replace regexp replace来做到这一点 但我正在寻找类似于SQL Server中的东西 删除以下数字但不删除相邻的数字含
  • 打印 sqlalchemy 行

    我想做的就是打印 sqlalchemy 表行的一行 假设我有 from sqlalchemy import Column Integer String from sqlalchemy ext declarative import decla
  • 在 PostgreSQL 中进行 DROP 时,避免引用表上的独占访问锁

    为什么在 PostgreSQL 中删除表需要ACCESS EXCLUSIVE锁定任何引用的表 我怎样才能将其减少到ACCESS SHARED锁还是根本不锁 即有没有办法在不锁定引用表的情况下删除关系 我在文档中找不到任何提及需要哪些锁 但是
  • Azure PostgreSQL 时间点还原不起作用

    我们在 Azure 中有一个 Postgre 数据库 但遇到了一个问题 表中的所有行都被删除 我们尝试使用 de azure 门户中的 时间点还原 选项 但创建的数据库与当前运行的数据库具有相同的数据 我们还尝试了其他日期和时间 数据库问题
  • Python 和 Postgresql:操作错误:fe_sendauth:未提供密码

    我知道 StackOverflow 上有很多类似的问题 但我已经阅读并重新阅读了它们 但我似乎无法解决我的特定问题 我正在开发一个使用 Peewee 和 Psycopg2 访问 PostGresQL 数据库的 Python 应用程序 这一切
  • 如果数组重叠,则折叠多行数组

    我在 PostgreSQL 9 3 中有一个表 其中包含一个列 每行包含一个数组 我正在努力寻找崩溃的方法 共享相同元素的数组行 Examples 简单重叠 给定以下两行数组 1 2 3 5 3 6 9 结果将是一行包含 5 1 2 3 6
  • 如何配置 pgAdmin III 在启动时打开默认数据库并选择表节点?

    当我启动 pgAdmin III 时 99 的情况下我都需要查看某个特定数据库的表 每次都要点击树 很烦人 当我打开 pgAdmin 时 我希望它自动连接到我的最后一个数据库并展开左侧的树并选择 表 节点 那可能吗 同样令人烦恼的是 当我重
  • 无法安装 psycopg2 Ubuntu

    试图为 django 项目准备好服务器 但我在设置 postgres 时遇到了一些问题 我正在遵循本指南 https jee appy blogspot com 2017 01 deply django with nginx html ht
  • 如何在 NHibernate 中自动生成 ID

    如何让 NHibernate 自动生成表的唯一 ID ID 可以是任意的long值 只要每个值仅使用一次 我当前的映射如下所示
  • 如何使用flyway将数据从一个DB迁移到另一个DB?

    我在不同的服务器上有两个 postgreSql DB 比如说 A 和 B 我可以使用 Flyway 一些如何将所有数据从 DB A 复制到新设置且为空的 B 如果有人指出我正确的方向和工具 这将很有帮助 要求是通过某种工具自动化将数据从一个
  • 将enable_nestloop设置为OFF有哪些陷阱

    当我的表中有大量行时 我的应用程序中有一个查询运行得非常快 但是 当行数适中 既不大也不小 时 相同的查询运行速度会慢 15 倍 解释计划显示对中等规模数据集的查询正在使用嵌套循环其连接算法 大数据集使用散列连接 我可以阻止查询规划器在数据
  • 如何在 typeorm 中使用 LEFT JOIN LATERAL?

    我想在 TypeOrm 中使用以下查询 但找不到将其转换为 TypeOrm 的方法 任何帮助表示赞赏 SELECT FROM blocked times bt LEFT JOIN LATERAL SELECT FROM bookings b
  • 具有 createSQLQuery 的 ResultTransformer 强制实体字段中不使用驼峰式命名法

    我有一个sql查询如下 List
  • 是否可以从数据库转储生成 knex 种子文件?

    就我而言 我使用的是 mysql 但是 我正在寻找一种通用解决方案 用于从当前运行的数据库或数据库转储生成 knex 种子文件 我可以就像是 https github com tgriesser knex issues 944 issuec
  • Django Channels Postgres InterfaceError:连接已关闭

    我似乎无法理解这里的问题 我正在为我的渠道消费者编写测试文档中的描述 https channels readthedocs io en latest topics testing html 我通常会使用 Django 默认的单元测试 但由于
  • 带回调或异步/等待的节点 postgres 事务?

    我正在运行 Node 7 6 0 它支持 async await node postgres 客户端池支持 async await 并且有一个很好的示例here https github com brianc node pg pool pl

随机推荐

  • android Google Play 警告:SSL 错误处理程序漏洞

    我在我的应用程序中使用 gorbin ASNE SDK 我最近收到一封来自 Google 的电子邮件 主题如下 Google Play 警告 SSL 错误处理程序漏洞 在这封电子邮件中 Google 解释说我的应用程序有一个 WebView
  • 在全屏模式下调整框架组件的大小

    我希望我的框架组件始终在屏幕中进行调整 无论屏幕尺寸如何 我在笔记本电脑 小屏幕 中绘制框架 当我在另一台具有大屏幕的机器 jar 文件 中运行应用程序时 框架组件不会重新调整大小 当我在任何机器上将框架置于全屏模式时 如何使框架调整其组件
  • Zend Framework 中处理会话的最佳方法

    因此 我在 Zend 框架中启动 并希望实现站点范围的 用户 会话 我可以从应用程序中的所有模块 控制器轻松访问它 我想 我应该在库中创建一个新的命名空间并扩展控制器 例如 class MYCUSTOMLIB Controller Acti
  • MySQL 查询月份年份

    我有一个包含以下字段的表 id int name varchar dob datetime 现在我需要一个可以同时匹配月份和年份的查询 我现在使用的是 select from users where month dob 12 and yea
  • Scala Spark Encoders.product[X](其中 X 是案例类)不断给出“No TypeTag available for X”错误

    我正在 Scala 工作表中使用 Intellij Idea 我想为 scala 案例类创建一个编码器 从互联网上的各种帖子中 我找到了使用 Encoders product 的建议 但它从来没有对我有用 下面的代码 import org
  • 如何将事件绑定到 Canvas 项目?

    如果我使用画布来显示数据 并且希望用户能够单击画布上的各个项目以获得更多信息或以某种方式与之交互 那么最好的方法是什么 在线搜索我可以找到有关如何将事件绑定到标签的信息 但这似乎比我想要的更间接 我不想用标签对项目进行分组 而是当用户单击画
  • 如何在 XSLT 转换中为元素的默认数据类型添加属性“type”

    例如 输入 XML
  • 从 Python 生成图形的最简单方法? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 Python 处理填充有我想要运行计算的数据的 CSV 文件 然后绘制图表 我正在寻找一个可
  • 在 C++ 中传递对象所有权

    表明一个对象想要获得另一个对象的所有权的最佳方式是什么 到目前为止 我一直在使用std auto ptr在公共接口中 因此客户端知道该接口想要获取所传递对象的所有权 然而 最新的 GCC 告诉我auto ptr已弃用 所以我想知道推荐什么
  • 如何使用 VisPy 库实时绘图?

    我编写了一个脚本来模拟流行病的演变 使用图表和散点图 我尝试了几个库来实时显示结果 8 个国家 x 500 个粒子 Matplotlib 不够快 PyQtGraph 更好但仍然不够快 OpenGL 很好 但我没有找到如何在 2D 中有效地使
  • 如何在屏幕旋转时保持recyclerView的滚动位置

    我正在使用 gridlayoutManager 填充 recyclerView 现在我想保存屏幕旋转的滚动位置 我尝试使用 onSaveInstanceState 和 onRestoreInstanceState 来执行此操作 如本文所示
  • WPF DataGrid - 如何在按下 Tab 键后将键盘焦点移动到新添加的行

    如果我们在最后一行的最后一列上按 Tab 键 WPF DataGrid 将添加一个新行 但添加新行后 焦点将移至网格的顶行 我们如何确保焦点移动到新行的第一列 你可以尝试类似的东西 this SelectRowCell this Items
  • php“curl”不起作用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 从 Excel 工作簿 VSTO 调用 Excel 加载项函数

    我想在 Excel Add In 2007 解决方案中创建一个方法 可以从我的 Excel Workbook 2007 解决方案中调用该方法 我解释一下 我想从Excel工作簿2007解决方案的代码隐藏文件中调用Excel加载项的方法 我不
  • 读取大型制表符分隔文件分块时出现异常

    我有一个 350MB 制表符分隔的文本文件 如果我尝试将其读入内存 则会出现内存不足异常 所以我正在尝试一些类似的事情 即只阅读几列 import pandas as pd input file and path r C Christian
  • Python 256位哈希函数,带数字输出

    我需要一个具有 256 位输出 如 long int 的哈希函数 首先 我认为我可以使用 hashlib 中的 SHA256 但它有一个字符串输出 我需要一个数字来计算 将 32 字节字符串转换为 long 也可以 但我没有找到任何东西 在
  • 快速文件复制并取得进展

    我正在为 Linux 编写一个 SDL 应用程序 它可以从控制台运行 无 X 服务器 我拥有的一个功能是文件复制机制 它将特定文件从 HDD 复制到 USB 闪存设备 并在 UI 中显示此复制的进度 为此 我使用简单的 while 循环并按
  • 当嵌入类型具有 UnmarshalJSON 时,json.Unmarshal 失败

    我正在尝试解组具有嵌入类型的结构 当嵌入类型具有 UnmarshalJSON 方法时 外部类型的解组失败 https play golang org p Y Tt5O8A1Q https play golang org p Y Tt5O8A
  • 编辑pip安装的包

    我正在尝试编辑通过 pip 安装的一个名为 py mysql2pgsql 的包 将数据库从 mysql 转换为 postgre 时出现错误 就像this https stackoverflow com questions 26008398
  • 保留 string_agg 内部的不同顺序

    Mysql函数 with recursive locpais as select l id l nome l tipo tid lp pai from loc l left join locpai lp on lp loc l id whe