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

选择数据到Postgres数组中

翟淇
2023-03-14
问题内容

我有以下数据:

name          id             url

John          1              someurl.com
Matt          2              cool.com
Sam           3              codingdict.com

如何在Postgres中编写SQL语句以选择此数据为多维数组,即:

{{John, 1, someurl.com}, {Matt, 2, cool.com}, {Sam, 3, stackoverflow.com}}

我以前在Postgres中已经见过这种数组的用法,但是不知道如何从表中选择数据到这种数组格式。

假设这里所有列都是type text


问题答案:

您不能用于array_agg()生成多维数组,至少不能用于PostgreSQL 9.4或更高版本。
(但是即将发布的Postgres 9.5附带了该罐的新变体array_agg()!)

您从@Matt Ball的查询中得到的是一个记录数组(the_table[])。

数组只能包含相同基本类型的元素。您显然具有数字和字符串类型。转换所有(尚未存在的)列text以使其起作用。

您可以为此创建一个聚合函数,就像我之前在这里向您展示的那样。

CREATE AGGREGATE array_agg_mult (anyarray)  (
    SFUNC     = array_cat
   ,STYPE     = anyarray
   ,INITCOND  = '{}'
);

称呼:

SELECT array_agg_mult(ARRAY[ARRAY[name, id::text, url]]) AS tbl_mult_arr
FROM   tbl;

注意附加ARRAY[]层使其成为多维数组(精确地说是二维的)。

即时演示:

WITH tbl(id, txt) AS (
    VALUES
      (1::int, 'foo'::text)
     ,(2,      'bar')
     ,(3,      '}b",') -- txt has meta-characters
    )
    , x AS (
    SELECT array_agg_mult(ARRAY[ARRAY[id::text,txt]]) AS t
    FROM   tbl
    )
SELECT *, t[1][3] AS arr_element_1_1, t[3][4] AS arr_element_3_2
FROM   x;


 类似资料:
  • 命令用于选择数据库,如果想在一个数据库上工作,比如:创建表,查询表,更新,创建存储过程等等,那么首先需要选择一个目标数据库。 示例 假设在MariaDB数据库服务器中,存在有多个数据库,我们必须选择一个特定的数据库。 例如,在下图中显示了多个数据库: 这里我们将使用数据库来创建表等。所以需要使用以下命令。 在执行上面查询语句后,就已经选择数据库。之后就可以在里面创建表等数据对象了。执行上面查询语句

  • 上一章节我们讲了如何创建数据库,接下来我们来讨论如何去选择我们创建的数据库。 数据库的命令窗口 PostgreSQL 命令窗口中,我们可以命令提示符后面输入 SQL 语句: 使用 \l 用于查看已经存在的数据库: 接下来我们可以使用 \c + 数据库名 来进入数据库: 系统命令行窗口 在系统的命令行查看,我么可以在连接数据库后面添加数据库名来选择数据库: pgAdmin 工具 pgAdmin 工具

  • 在MySQL 中就有很多系统自带的数据库,那么在操作数据库之前就必须要确定是哪一个数据库。 在 MySQL 中, USE 语句用来完成一个数据库到另一个数据库的跳转。 当用 CREATE DATABASE 语句创建数据库之后,该数据库不会自动成为当前数据库,需要用 USE 来指定当前数据库。其语法格式为: 该语句可以通知 MySQL 把 所指示的数据库作为当前数据库。该数据库保持为默认数据库,直到

  • 问题内容: CREATE TABLE emp ( empno decimal(4,0) NOT NULL, ename varchar(10) default NULL, job varchar(9) default NULL, mgr decimal(4,0) default NULL, hiredate date default NULL, sal decimal(7,2) default N

  • 我有以下表在PostgreSQL 11. 我想得到具有col1,col2,col3和col4的不同值的行,如果col1,col2,col3相同,则取col1的第一个值。 期望的输出是: 我试着回答以下问题。 如何将输出限制为每col2,col3.获得一个col1值。。例如,选择col1值:3876,不包括3924。

  • 问题内容: 我有以下数据框: 我想选择列“ a”,然后仅选择一个特定元素(即,首先:1.,2.,3)。 我需要添加什么: ? 问题答案: 选择带有标签的行。 选择作为和的instersection的单元格 选择 所有 行和名为的列。请注意,尽管这可行,但这并不是引用数据框的列的惯用方式。为此,您应该使用 现在,您在列的单元格中有了列表,因此可以使用向量化的字符串方法来访问这些列表的元素,如下所示。