在我的sql脚本中我想用最后一个查询返回一些记录.对于该查询,我正在使用聚合:
CREATE AGGREGATE array_agg_mult(anyarray) (
SFUNC = array_cat,
STYPE = anyarray,
INITCOND = '{}'
);
Run Code Online (Sandbox Code Playgroud)
因此,如果我两次调用脚本,我必须在最后删除聚合.但是脚本应该以自定义sql查询结束.有没有办法说出类似的话CREATE OR REPLACE?
我喜欢在xPath中使用正则表达式,所以我安装了Saxon9.6
然后我在C:\ Program Files\Java\jdk1.7.0_51\jre\lib下创建了一个jaxp.properties文件并添加以下行:
javax.xml.transform.TransformerFactory = net.sf.saxon.TransformerFactoryImpl javax.xml.xpath.XPathFactory","net.sf.saxon.xpath.XPathFactoryImpl
但是现在我找不到像这个页面上描述的那样的例子.
我要执行以下选择语句
SELECT array_to_json(array_agg(row_to_json(opt)))
FROM (
SELECT * FROM option WHERE optionid IN (:tags)
)opt
Run Code Online (Sandbox Code Playgroud)
通过
MapSqlParameterSource params = new MapSqlParameterSource();
Integer[] a={2200,23};
params.addValue("tags", Arrays.asList(a));
getSimpleJdbcTemplate().queryForObject(statement, String.class, params);
Run Code Online (Sandbox Code Playgroud)
但是我总是遇到错误:
类org.springframework.dao.InvalidDataAccessApiUsageException没有为SQL参数'tags'提供值:没有为键'tags'注册的值
如果我使用相同:
Integer[] a = { 2200, 23 };
params.addValue("tags", Arrays.asList(a));
namedParameterJdbcTemplate.queryForObject(statement, params, String.class);
Run Code Online (Sandbox Code Playgroud) 我有一个表"A",其中一列"col1",其中每个记录是一个整数数组.
col1
-----
{1,2,3,4}
{1,2,6,7}
{1,2,3,8,9}
Run Code Online (Sandbox Code Playgroud)
我喜欢有一行结果,其中包含"col1"中所有数组的重叠或交叉.
select overlap(col1) from A;
result
-----
{1,2}
Run Code Online (Sandbox Code Playgroud) 在下面的示例中,我想将方括号“ {”和“}”更改为“ [”和“]”。我有一个带有两个列的表A,一个是字符串类型的text_1,第二个是bigint类型的计数。我正在尝试做的是返回矩阵表示法,例如[[1,2,4],[2,4,5],...]。
CREATE AGGREGATE array_agg_mult(anyarray) (
SFUNC = array_cat,
STYPE = anyarray,
INITCOND = '{}'
);
WITH B AS(
SELECT
array_agg(count) AS count
FROM
A
GROUP BY
text_1
)
SELECT
array_agg_mult(ARRAY[count])
FROM
B;
Run Code Online (Sandbox Code Playgroud)
除了如何更新array_agg_mult,如果我尝试改变INITCOND = '{}',以INITCOND = '[]'我得到的
错误:函数“ array_agg_mult”已经存在且参数类型相同
通过将json生成与postgres结合使用,可能是一个明智的解决方案。
我有两个表 A 和 B。每个表都有一个字符串类型的列“名称”。我想从连接操作中获取所有记录,其中 A.name 是 B.name 的子字符串。
select * from A inner join B on A.name like concat('%',B.name,'%');
Run Code Online (Sandbox Code Playgroud)
结果是一个空表。该查询出了点问题,因为如果我通过以下方式测试它,我会得到结果
select * from A cross join B where A.name like 'test' and B.name like '%test%';
Run Code Online (Sandbox Code Playgroud)
在那里我得到了一些静态值“测试”的记录。