2013-05-01 52 views
0

我使用PostgreSQL和Spring 3.1 NamedParameterJdbcTemplate。按名称命名参数与Spring的NamedParamterJdbcTemplate

如果我有一些SQL在选择& Group By子句中使用命名参数,Postgres会将其作为错误的语法返回。用手动替换参数运行查询将正常工作。

假设有一个被称为 '表' 2列 “ID” 和 “数量”

该SQL表:

SELECT some_function(id, :param), avg(number) FROM table GROUP BY some_function(id, :param)

变为(如记录由DB):

SELECT some_function(id, $1), avg(number) FROM table GROUP BY some_function(id, $2)

我怀疑查询计划器看着这个查询,它不知道$ 1 == $ 2,所以它提供了es错误“列'id'必须出现在GROUP BY子句中或用于聚合函数中。”

是否有办法解决这个使用Spring?有没有办法让它查询变成:

SELECT some_function(id, $1), avg(number) FROM table GROUP BY some_function(id, $1)取而代之?查询计划者会对我怀疑的事情好。

回答

1

你可以写:

SELECT some_function(id, $1), avg(number) FROM table GROUP BY 1; 

它将被SELECT结果的第一列(some_function(id, $1))组。

另一种方式是写这样的:

SELECT grp, avg(number) 
FROM (SELECT some_function(id, $1) as grp, number FROM table) 
GROUP BY grp; 
+0

第一个解决方案没有奏效。第二个适用于简单的SQL查询。我最终做了手动替换。 – dontocsata 2013-05-09 15:48:15