java - 使用 Spring 的 NamedParamterJdbcTemplate 和命名参数进行分组

标签 java sql spring postgresql spring-jdbc

我正在使用 PostgreSQL 和 Spring 3.1 NamedParameterJdbcTemplate。

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

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

此 SQL:

从表 GROUP BY some_function(id, :param) 中选择 some_function(id, :param), avg(number)

变成(由数据库记录):

从表 GROUP BY some_function(id, $2) 中选择 some_function(id, $1), avg(number)

我怀疑查询计划程序查看此查询,但它不知道 $1==$2,因此它给出错误“列 'id' 必须出现在 GROUP BY 子句中或在聚合函数中使用。 ”

有没有办法使用 Spring 来解决这个问题?有什么方法可以获取它,以便查询变为:

SELECT some_function(id, $1), avg(number) FROM table GROUP BY some_function(id, $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;

关于java - 使用 Spring 的 NamedParamterJdbcTemplate 和命名参数进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16323638/

相关文章:

java - JFrame 内的 JFrame

java - 关于 java String 文字池和 String 拼接的困惑

sql - 将整数列转换为 varchar 并与字符串进行比较

Spring - 我应该使用@Bean 还是@Component?

java - org.hibernate.TypeMismatchException : Provided id of the wrong type while fetching data

java - 将数据插入firebase实时数据库后看不到数据

java - spring boot data jpa连接不上mysql数据库

sql - Illuminate\Support\Fluent 类的对象无法转换为 int

mysql - 条件乘法

java - 无法访问 Spring Boot 的请求映射