我正在使用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)
相反?我怀疑查询计划器是可以的。
答案 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;