我有三个专栏:

Year Month Day
2023 5 1
2022 6 13

我想为Date创建一列

Date
2023-5-1
2022-6-13

我在雅典娜做这件事.

CREATE VIEW my_view AS
SELECT
    year,
    month,
    day,
    array_join(array_agg('year','month','day'), '-') AS aggregated_dates , 
    count(*) AS aggregated_dates
FROM "my_table"

这是一个错误:

的意外参数(varchar(4)、varchar(5)、varchar(3)) 函数数组_agg.预期:ARRAY_AGG(T)T

我也试过了

SELECT *, 
  translate(format('%t', array_agg(struct(year,month,day))),'()', '') AS dates
FROM "my_table"

但我得到的错误是函数 struct 、格式没有注册.

你有没有更好的办法来创建这一栏?

推荐答案

array_aggaggregation function,它既可以与group_by一起使用,也可以在window function中使用.因为您希望在一行中连接多个列,所以可以使用任何一种连接方法(基于对另一个答案的注释,因为您的数据类型是int,您需要强制转换为varchar):

select  cast(year as varchar) || '-' || cast(month as varchar) || '-' || cast(day  as varchar) aggregated_dates;
from ...

或者修改您的array_join方法,只需从3列创建数组:

select array_join(array[year, month, day], '-') aggregated_dates;
from ...

附注:

请注意,'year'不是一个列,它只是一个包含单词"Year"的字符串.

Sql相关问答推荐

在SQL:2003(PGQ)中,Cypher查询语言、GQL、PGQL和属性图查询的常见子集是什么?'

SUM(条件)在Oracle?

出现5次后,将所有正斜杠替换为连字符

在多个联合中使用相同的SELECT SQL查询

Postgres:对包含数字的字符串列表进行排序

Access VBA SQL命令INSERT FOR MULTIME VALUE

使用SQL创建列出两个时间戳之间小时数的列

过go 四周未填充的数据,即W50,51,52-SQL

两个不同星期的销售额,不加成一行

将日期时间转换为日期格式

按二维数组的第一个元素排序

将二维数组的第一个和第二个元素取消嵌套到两个一维数组中

日期逻辑(查找过go 90 天内的第一个匹配行)

如何 for each id创建长度等于id长度的不同日期序列?

识别SQL Server中的重复数字

获取所有用户的第一次和最后一次发货以及到达日期

在where语句中使用CTE非常缓慢

正则表达式忽略特定数据部分的分隔符

如何从 2 个 SQLite 表构建嵌套对象?

按 15 分钟递增计数分组,包括 0 计数