【问题标题】:Group by with Named Parameter with Spring's NamedParamterJdbcTemplate使用 Spring 的 NamedParamterJdbcTemplate 与命名参数分组
【发布时间】:2013-05-01 17:58:25
【问题描述】:

我正在使用 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)?我怀疑查询规划器会接受。

【问题讨论】:

    标签: java sql spring postgresql spring-jdbc


    【解决方案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;
    

    【讨论】:

    • 第一个解决方案不起作用。第二个适用于更简单的 SQL 查询。我最终做了手动更换。
    猜你喜欢
    • 2015-12-04
    • 2013-02-23
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多