当前位置: 首页 > 面试题库 >

在SELECT中创建数组

顾俊誉
2023-03-14
问题内容

我正在使用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;

返回值:

  • ct_total:总计数ba
  • ct_distinct_b:计数不同的ba
  • b_arrb正频率为的数组b,按的频率排序b

由总数有序ba

另外,您可以在PostgreSQL 9.0或更高版本ORDER BY的聚合调用中使用一个子句。喜欢:

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;


 类似资料:
  • 问题内容: 我有3张桌子。团队,选项,选项团队。 团队拥有一个TeamId,名称 拥有Option拥有OptionId,OptionGroup OptionTeam拥有TeamId,OptionId,OptionGroup 我想获得一个团队列表,以及额外的列,这些列指示每个组有多少个选项连接到每个团队。这是通过上面的查询完成的,但是我想用表Option中的OptionGroup值替换4,5,6,1

  • 问题内容: 我试图传递包含键和值的数组。 键是列,值是要选择的值。 我试图编写一个函数,可以传递数组并将键和值用作表的列和值。例如: 我需要这样创建sql语句: 问题答案: 您可以构建一个简单的SQL Select,如下所示:

  • 问题内容: 我正在尝试在java中创建一个通用数组-在其中我遇到了一些问题-我如何制作一个大小为6且里面有一个byte []和一个Integer的元组数组? 谢谢 问题答案: 好吧,您可以使用原始类型: 或者,您可以进行未经检查的转换: 或者,您也可以使用列表: 我建议改用列表。 在前两个选项之间进行选择,我建议您选择未经检查的转换,因为它将为您提供编译时检查。但是,如果将其他类型的元组放入其中,

  • 我想知道你能在MySQL中创建一个数组变量吗?我知道你可以创建一个普通变量,比如so

  • 问题内容: 背景 我想在sql select语句中动态重命名case语句。 例如: 我想要的输出是创建的列列表,其中标签作为与“ id”列不同的id。 但是,此变量 x.id 并不是动态输出值,而是我输出的是单列x.id。 例如: 表中的列… id — c1 ---- c2 1 ---- x1 — x2 2 ---- x2 ---- x3 3 ---- x4 ---- x5 在运行查询后,期望的列

  • 我有一个下拉列表,由选择元素初始化。 如何创建mvvm绑定到选定的数据文本字段? 我没有数据源。 我必须绑定到选定的文本。例如:和 更新