0

我正在使用 PostgreSQL 和 Spring 3.1 NamedParameterJdbcTemplate。

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

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

这个 SQL:

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

变为(由数据库记录):

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

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

有没有办法使用 Spring 解决这个问题?有没有办法得到它,所以查询变成:

SELECT some_function(id, $1), avg(number) FROM table GROUP BY some_function(id, $1)反而?我怀疑查询计划器会对此表示满意。

4

1 回答 1

2

你可以写:

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;
于 2013-05-01T18:26:51.633 回答