PostgreSQL:有效地将数组列聚合为组的一部分

2024-03-18

我们希望对表执行 GROUP BY 操作。原始表包含一个 ARRAY 列。在一个组内,这些数组的内容应转换为具有唯一元素的单个数组。这些元素不需要排序。包含 最新的 PostgreSQL 版本可用。

原始表示例:

  id | fruit  | flavors               
---: | :----- | :---------------------
     | apple  | {sweet,sour,delicious}
     | apple  | {sweet,tasty}         
     | banana | {sweet,delicious}    

期望结果示例:

count_total | aggregated_flavors          
----------: | :---------------------------
          1 | {delicious,sweet} 
          2 | {sour,tasty,delicious,sweet}

创建原始表的 SQL 玩具代码:

CREATE TABLE example(id int, fruit text, flavors text ARRAY);
INSERT INTO example (fruit, flavors)
VALUES ('apple', ARRAY [ 'sweet','sour', 'delicious']),
       ('apple', ARRAY [ 'sweet','tasty' ]),
       ('banana', ARRAY [ 'sweet', 'delicious']);

我们提出了一个解决方案,需要将数组转换为 s

SELECT COUNT(*) AS count_total,
       array
  (SELECT DISTINCT unnest(string_to_array(replace(replace(string_agg(flavors::text, ','), '{', ''), '}', ''), ','))) AS aggregated_flavors
FROM example
GROUP BY fruit

然而我们认为这不是最佳的,并且可能会有问题,因为我们假设字符串既不包含“{”、“}”也不包含“,”。感觉必须有函数可以按照我们需要的方式组合数组,但我们找不到它们。

非常感谢大家!


假设每条记录都包含一个唯一的id value:

SELECT
    fruit,
    array_agg(DISTINCT flavor),      -- 2
    COUNT(DISTINCT id)               -- 3
FROM
    example,
    unnest(flavors) AS flavor        -- 1
GROUP BY fruit
  1. unnest()数组元素
  2. 通过...分组fruit value: array_agg()对于不同的flavors
  3. 通过...分组fruit value: COUNT()对于不同的id与每个fruit group.

if the id列确实是空的,您可以生成id值例如row_number()窗函数 https://www.postgresql.org/docs/current/tutorial-window.html:

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

PostgreSQL:有效地将数组列聚合为组的一部分 的相关文章

  • 调整ArrayBuffer的大小

    如果我想创建一个数组缓冲区 我会写 var buff new ArrayBuffer size 但是如何调整现有缓冲区的大小呢 我的意思是 在缓冲区末尾添加更多字节 ArrayBuffer 本身没有设置 有set https develop
  • 如何循环遍历对象数组并生成键值对?

    我有一个像这样的对象数组 let someObj items id 12 value true id 34 value true id 56 value false 我想将其添加到现有对象中 其中 id 是该对象的键 如下所示 let ob
  • Swift 使用哪种通用排序算法?它在排序数据上表现不佳

    我一直在挑选和探索 Swift 标准库sort 其函数为Array类型 令我惊讶的是 我注意到它在已经排序的数据上表现不佳 对数组进行排序Int打乱顺序似乎比对已经排序的同一个数组进行排序快 5 倍 对已打乱顺序的对象数组进行排序比对已按排
  • Django 独特的不工作

    我在从查询中过滤掉重复项时遇到问题 我正在使用 Django 1 4 和 Postgres 8 4 13 我在我的模型对象上使用这个查询 它是一个 jquery 自动完成 term request GET get term field re
  • 如何按 pandas 中的值对系列进行分组?

    我现在有一只熊猫Series与数据类型Timestamp 我想按日期对其进行分组 并且每组中有许多行具有不同的时间 看似显而易见的方法类似于 grouped s groupby lambda x x date 然而 熊猫的groupby按索
  • Django 和 PostgreSQL - 值对于类型字符变化来说太长(512)

    我正在从测试 SQLite 数据库迁移到 PostgreSQL 数据库 我有一个插入到数据库中的示例对象 它在 SQLite 上工作 但在 PostgreSQL 中给我一个错误 代码片段是 car CarItem objects creat
  • 手动将数据库中的数据插入具有 hibernate_sequence @GenerateValue(strategy = GenerationType.TABLE) 的表中

    我有 ID 为 GenerateValue strategy GenerationType TABLE 的表 需要在postgresql生产数据库上手动插入800条记录 我们从oracle迁移到postgresql 很少有用户错误地访问旧链
  • pg_restore错误:角色XXX不存在

    尝试将数据库从一个系统复制到另一个系统 涉及的版本是9 5 0 源 和9 5 2 目标 源数据库名称是foodb与主人pgdba并且目标数据库名称将被命名foodb dev与主人pgdev 所有命令都在将托管副本的目标系统上运行 The p
  • JPA 支持查询 Postgres JSON 字段

    JPA 是否已经支持处理 JSON 字段的查询 如下所示 select from person where info gt gt age numeric 40 select from person where info gt gt firs
  • 如何使用 MySQL 选择有特定值的 2 个连续行?

    我正在构建一个系统 该系统应该显示学生何时连续缺席两天 例如 此表包含缺勤情况 day id missed 2016 10 6 1 true 2016 10 6 2 true 2016 10 6 3 false 2016 10 7 1 tr
  • 按范围迭代数组

    我有一个数组 1 2 3 4 5 6 100 我希望将此数组迭代 5 次 具体来说 取数组的前 5 个数字并获取平均值 继续处理接下来的 5 个数字并获取平均值 依此类推 我尝试过多种方法 例如Dequeue和 for 循环但未能获得所需的
  • JavaScript 中数组的 HTML 数据列表值

    我有一个简单的程序 它必须从服务器上的文本文件中获取值 然后将数据列表填充为输入文本字段中的选择 为此 我想要采取的第一步是我想知道如何动态地将 JavaScript 数组用作数据列表选项 我的代码是
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • “WHERE”处或附近的语法错误

    创建 postgres 函数时会导致错误 如下所示 错误 WHERE 处或附近的语法错误 第 19 行 其中 s shift id shiftid 错误 错误 WHERE 处或附近的语法错误 SQL状态 42601 人物 108 请帮忙 C
  • 为什么 SORT_REGULAR 在 PHP 中产生不一致的结果?

    我正在开发一个类 它使 PHP 中的数组排序变得更容易 并且我一直在使用 SORT 常量 但是行为或SORT REGULAR 默认排序类型 似乎有所不同 具体取决于您在数组中添加项目的顺序 此外 我找不到任何模式来解释为什么会出现这种情况
  • 如何修复“缺少表的 FROM 子句条目”错误

    我正在尝试根据游戏 ID 获取平台名称 我有如下三个表 我正在尝试加入它们以获得所需的结果 Games Id 1 2 3 4 Game Platforms Id game id platform id 1 1 1 2 1 2 3 3 3
  • 如何将两个long转换为字节数组=如何将UUID转换为字节数组?

    我正在使用 JavaScriptUUID并且需要将 UUID 转换为字节数组 奇怪的是 UUID 类不提供 toBytes method 我已经了解了这两种方法 UUID getMostSignificantBits and UUID ge
  • 正则表达式可以与 C++ 中的字符数组一起使用吗

    我正在开发一个无法使用字符串库文件的程序 而是使用字符数组 我能够使用正则表达式 并且想知道是否有办法使用正则表达式和字符数组 甚至正则表达式和单个字符 我问的原因是当我尝试在匹配中使用我的 char 数组时 xUtility 会抛出一堆来
  • 如果存储字符串的 char 数组小于字符串,C++ 真正将字符串存储在哪里?

    我正在测试 C Premiere 书中有关 C 字符串的示例 const int size 9 char name1 size char name2 size C owboy 8 characters here cout lt lt How
  • 将文本拆分为数组,同时保留 Swift 中的标点符号

    我想将文本拆分为一个数组 保持标点符号与其余单词分隔开 因此字符串如下 Hello I am Albert Einstein 应该变成这样的数组 Hello I am Albert Einstein 我尝试过sting components

随机推荐

  • VS2013测试代理和控制器不通信

    我有一个运行 VS2013 负载测试控制器的 Windows Azure VM 和另一个运行 2013 负载测试代理的 Azure VM 我一直无法让两人成功沟通 我将每个虚拟机的主机名和 IP 添加到另一个虚拟机的 HOSTS 文件中 我
  • 依赖注入上下文中的组合根是什么?

    我正在探索依赖注入和术语成分根到处都在使用 那么它是什么 组合根是应用程序中使用依赖项注入容器组合应用程序的对象图的单个位置 尽管如何完成此操作无关紧要 它可以使用容器 也可以使用手动完成 pure DI http blog ploeh d
  • 是否可以在 HTML 中创建多级有序列表? [复制]

    这个问题在这里已经有答案了 我要这个 1 Main 1 1 sub1 1 2 sub2 2 Main2 2 1 sub3 可以在 HTML 中做到这一点吗 谢谢 这个解决方案对我有用 hide original list counter o
  • 我什么时候使用像 Paxos 这样的共识算法,什么时候使用像向量时钟这样的算法?

    我已经阅读了很多有关保证分布式系统中节点之间一致性的不同策略的文章 但我在弄清楚何时使用哪种算法时遇到了一些麻烦 我会在什么样的系统中使用矢量时钟之类的东西 哪个系统最适合使用 Paxos 之类的东西 两者是互相排斥的吗 有一个由 2 个节
  • Laravel 有许多多对多对一雄辩

    我没有太多运气以 Laravel 的方式解决这个问题 所以我提出两个问题 假设我有一辆汽车 并且该汽车可以有许多特征 但该特征也按特征类型分隔 我如何返回所述汽车的所有特征 分隔特征类型 我有四个表 listings features 是数
  • 调整 UISearchDisplayController 变暗黑色覆盖层的大小

    单击搜索栏后 有人知道如何过度调整暗黑色的大小吗 当我单击 取消 时 我遇到问题 表格视图将消耗然后动画消失 我用它来调整我的结果表视图的大小 void searchDisplayController UISearchDisplayCont
  • 寻找良好的服务器端语言,允许玩家上传可执行的代码

    我有一个想要编写的程序的想法 但哪种语言最好是我的问题 如果我有一款赛车游戏 并且希望允许用户提交新的交互式 3D 赛道 想想 Speed Racer 电影中的赛道 车辆及其自动驾驶车辆的代码 那么他们将创建 AI对于他们的汽车来说 这将使
  • jquery datatable 使用表单编辑表行数据

    var tb example DataTable addRow on click function var typeName type option selected val var amount amount val tb row add
  • Java中的快速队列

    我正在寻找一个快速queueJava 中的实现 我看到LinkedList实施Queue接口 但它只会像LinkedList正确的 有没有一种方法可以让队列更快 特别是对于add 我只需要poll add并检查empty 以后我可能还需要一
  • 如何提取在 R 中运行 c5.0 决策树和基于规则的模型的错误率?

    我尝试在 R 中使用 c50 包 如中所述这个答案 https stats stackexchange com a 84021 我运行了以下命令 gt set seed 1 gt mod lt train Species data iris
  • 选项卡栏和地图视图问题

    我对这个问题真的很困惑 我最近在应用程序中的地图视图选项卡上遇到了问题 甚至到了重新开始的地步 我只是想知道我是否是唯一遇到此问题的人 或者我在这里做错了什么 我对 iOS 相当陌生 但我知道如何定义地图视图的中心和跨度 以便以用户位置为中
  • 如何将多个列分组为单个数组或类似数组?

    我希望我的查询返回这样的结构结果 其中tags是数组的数组或类似的数组 id name tags 1 a 1 name1 color1 2 name2 color2 2 b 1 name1 color1 3 name3 color3 我期望
  • 根据 Google 表格中的用户名查看特定行

    假设我有一个谷歌网站 该网站上有一个电子表格小工具 我希望小工具根据查看网站的用户的用户名显示电子表格中的某一特定行 这可以用 GAS 实现吗 Update function onOpen var ss SpreadsheetApp ope
  • Jupyter/iPython Notebook 的 Root 访问权限

    我正在尝试在 iPython Jupyter 笔记本中使用 bash 内核 但我需要在笔记本本身内进行 sudo 访问 我试过了 sudo jupyter notebook以 root 身份运行笔记本 但这只会返回 jupyter note
  • 使用 Solr 为多种语言建立索引

    我们正在设置一个 Solr 来索引文档 其中标题字段可以采用多种语言 谷歌搜索后我发现了两个选择 定义不同的模式字段 每种语言 即 title en title fr 应用不同 过滤到每种语言然后查询 带有 a 的标题字段之一 相应的语言
  • 我应该在 Laravel 中嵌套资源的路由吗?

    这可能有点主观 但我认为最佳实践必须存在 甚至对于 Laravel 应用程序来说 良好的设计 谷歌搜索的结果很多与这个问题的实际要点无关 假设我正在构建一个 Web 应用程序 该应用程序有团队 可能有项目 可能有文档 我应该设计路由 使文档
  • 批量命令复制、重命名然后移动全部失败

    我的简单批处理文件中出现一些错误 该文件旨在将文件 xyz 4do 复制到同一目录 然后将复制的文件重命名为 abc 4do 最后将复制 重命名的文件移动到不同的文件夹 我的代码如下 我已经评论了发生错误的地方 ECHO off CLS S
  • Firebase云函数服务器端全局变量

    有可能有一种全局变量关于 firebase 云功能 我的意思是我可以有一个index js就像设置全局变量一样 比方说panicModeVariable 我想在执行任何操作之前检查我的云函数中的此变量 例如在 auth create use
  • Laravel 5.4 --> 对存储中具有“公共”可见性的文件禁止 403

    我一直遇到 Laravel 的问题Storage class 我为用户创建了一个上传表单 以控制在其帐户中用作徽标的图像 我使用 Laravel文件存储 https laravel com docs 5 4 filesystem受到启发飞行
  • PostgreSQL:有效地将数组列聚合为组的一部分

    我们希望对表执行 GROUP BY 操作 原始表包含一个 ARRAY 列 在一个组内 这些数组的内容应转换为具有唯一元素的单个数组 这些元素不需要排序 包含 最新的 PostgreSQL 版本可用 原始表示例 id fruit flavor