在 SELECT 中创建数组

2024-02-29

我正在使用 PostgreSQL 9.1,并且有以下数据结构:

A     B
-------
1     a
1     a
1     b
1     c
1     c
1     c
1     d
2     e
2     e

我需要一个产生此结果的查询:

1    4     {{c,3},{a,2},{b,1},{d,1}}
2    1     {{e,2}}

A=1,总共 4 行,A=1,部分计数(3 行有 c 值,2 行有值,......)

  • “A”列的不同值
  • 与“A”值相关的所有行的计数
  • 数组包含与“A”值相关的所有元素及其自身的相对计数

数组所需的排序基于每个组的计数(如示例 3,2,1,1)。


这应该可以解决问题:

SELECT a
     , sum(ab_ct)::int AS ct_total
     , count(*)::int   AS ct_distinct_b
     , array_agg(b || ', ' || ab_ct::text) AS b_arr
FROM  (
    SELECT a, b, count(*) AS ab_ct
    FROM   tbl
    GROUP  BY a, b
    ORDER  BY a, ab_ct DESC, b  -- append "b" to break ties in the count
    ) t
GROUP  BY a
ORDER  BY ct_total DESC;

Returns:

  • ct_total: 总数b per a.
  • ct_distinct_b:不同的计数b per a.
  • b_arr: 数组b加上频率b,按频率排序b.

按总数排序b per a.

或者,您可以使用ORDER BY聚合调用中的子句 https://www.postgresql.org/docs/current/functions-aggregate.html在 PostgreSQL 9.0 或更高版本中。喜欢:

SELECT a
     , sum(ab_ct)::int AS ct_total
     , count(*)::int   AS ct_distinct_b
     , array_agg(b || ', ' || ab_ct::text ORDER BY a, ab_ct DESC, b) AS b_arr
FROM  (
    SELECT a, b, count(*) AS ab_ct
    FROM   tbl
    GROUP  BY a, b
    ) t
GROUP  BY a
ORDER  BY ct_total DESC;

可能会更清楚。但通常速度较慢。对子查询中的行进行排序适用于像这样的简单查询。更多解释:

  • 如何将 ORDER BY 和 LIMIT 与聚合函数结合应用? https://dba.stackexchange.com/a/213724/3684
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SELECT 中创建数组 的相关文章

随机推荐

  • 返回总和的 Lisp 函数

    我正在尝试编写一个奇怪的函数 所以请耐心等待 这个函数应该有一个列表L作为参数并有一个sum多变的 如果L不是列表 它应该返回nil 否则 它应该迭代列表的每个元素并执行以下操作 如果元素是数字且小于零 则应从总和中减去 1 如果元素是数字
  • 时间序列 - 相关性和滞后时间

    我正在研究一组输入变量和响应变量价格之间的相关性 这些都是按时间顺序排列的 1 我是否有必要平滑曲线其中输入变量是循环变量 自回归 如果是这样 怎么办 2 一旦建立相关性 我想准确量化输入变量如何影响响 应变量 例如 一旦 X 增加 gt
  • 缩放、旋转和裁剪图像

    我希望在 GUI 中能够永久缩放 旋转和裁剪图像 将更改保存到文件中 WPF本身就有能力吗 如果不是 是否有任何组件可以与 WPF 更好地集成 我还需要调整 JPEG 和 TIFF 格式的图像亮度和对比度 删除边框 Thisarticle
  • 为什么 Common Lisp 中冒号位于变量之前

    Common Lisp 中变量前面的冒号语法是什么意思 我见过这样的程序 我将在这里从大量函数中展示一些示例代码 defun expand successorf node mapcar lambda action state cost le
  • 重载类的流插入 (<<) 运算符

    它经常作为类的友元函数被重载 有什么方法可以将其重载为成员函数吗 有什么方法可以将其重载为成员函数吗 假设你有课Foo并且您想使用 Foo foo std cout lt lt foo 不 它不能 仅当第一个参数是类的对象时 成员函数重载才
  • 将 YouTube 嵌入代码精简为仅 URL

    请帮忙 我需要删除以下代码 以便它只使用 值 部分
  • 删除 ASP.net MVC 单页应用程序中的身份验证

    我正在尝试在 Visual Studio 2013 中使用 asp net MVC SPA 模板 我不需要任何身份验证位 我只需要直接加载到控制器页面之一 如何删除初始模板中的所有身份验证内容 去除 Authorize 注释来自HomeCo
  • 创建一个触发器,它将在另一个表更新时在表中插入记录

    假设我有表 T1 和 T2 Columns of T1 gt Value Columns of T2 gt OldValue NewValue 我需要的是一个触发器 它将在 T1 更新时在 T2 中插入一条记录 我还需要知道旧值和新值 我以
  • 如何在 R 中读取文本文件并创建数据框

    需要读取txt文件中https raw githubusercontent com fonnesbeck Bios6301 master datasets addr txt https raw githubusercontent com f
  • SQL Server - 仅使用 .modify() 合并两个 XML

    假设我们有 CREATE TABLE Users id INT PRIMARY KEY name VARCHAR 100 suggestions XML INSERT INTO Users id name suggestions SELEC
  • NodeJS 中的 Pub/Sub 实现

    我一直在尝试 NodeJS 的不同发布 订阅实现 并且想知道哪一个最适合特定应用程序 该应用程序的要求涉及多通道 多用户 3D 环境中对象的实时同步 我开始使用 socket io 创建了一个基本的通道数组 当用户发送消息时 它会循环该通道
  • Activemq 关闭失败然后终止进程

    我正在实施复制的 leveldb activemq 设置 我有 3 个 activemq 实例在同一个盒子上运行 我正在配置文件中更改它们的 rmiPort amqpport 和 openwire 端口 配置看起来像这样
  • Lua 整数类型

    我真的需要 Lua 中有一个整数类型 我所说的整数类型是指定义常用运算符 等 并表现得像整数的类型 内部表示并不重要 用表做这样的事情非常简单 问题是 我尝试过 并且性能非常差 当然 这是我的部分实现 function num op a b
  • 什么时候可以专门针对私有成员类型设计模板?

    鉴于这些定义 template
  • 如何按字符串中的第二个单词的字母顺序对列表进行排序

    如果我有一个列表 并且想继续向其中添加行并按姓氏字母顺序对它们进行排序 该怎么办 排序似乎只是按字符串的第一个字母重新排列它们 line James Edward Example line linesList append join lin
  • 有没有办法为 NavigationLink 添加额外的功能?斯威夫特用户界面

    我想向 NavigationLink 添加一个额外的功能 示例代码是这样的 struct ContentView View func yes print yes var body some View NavigationView Navig
  • while 循环不工作吗? (找不到变量)

    我的 do while 循环遇到问题 找不到变量来测试条件是否为真 这是我的代码 import java util Scanner public class Loops public static void main String args
  • Microsoft Azure 认知服务手写检测边界框参数

    我目前正在使用Microsoft Azure 认知服务手写检测 API https learn microsoft com en in azure cognitive services computer vision quickstarts
  • graph - 如果我用哈希表替换邻接列表中的每个链表,有什么缺点?

    CLRS excise 22 1 8 我是自学 没有在任何大学学习 假设每个数组条目 Adj u 不是链表 而是一个 包含顶点 v 的哈希表 其中 u v E 如果所有 边缘查找的可能性相同 预计的时间是多少 判断图中是否有边 有什么缺点
  • 在 SELECT 中创建数组

    我正在使用 PostgreSQL 9 1 并且有以下数据结构 A B 1 a 1 a 1 b 1 c 1 c 1 c 1 d 2 e 2 e 我需要一个产生此结果的查询 1 4 c 3 a 2 b 1 d 1 2 1 e 2 A 1 总共