使用带有Spring NamedParameterJdbcTemplate的命名参数分组

时间:2013-05-01 17:58:26

标签: java sql spring postgresql spring-jdbc

我正在使用PostgreSQL和Spring 3.1 NamedParameterJdbcTemplate。

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

假设有一个名为'table'的表,其中包含2列“id”和“number”

这个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,因此它给出错误“column'id'必须出现在GROUP BY子句中或用于聚合函数。 “

有没有办法绕过这个使用Spring?是否有某种方法可以获得它,以便查询成为:

SELECT some_function(id, $1), avg(number) FROM table GROUP BY some_function(id, $1)相反?我怀疑查询计划器是可以的。

1 个答案:

答案 0 :(得分:1)

你可以写:

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

它将按some_function(id, $1)结果的第一列(SELECT)进行分组。

另一种方法是写这样的东西:

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