0

私は PostgreSQL と Spring 3.1 NamedParameterJdbcTemplate を使用しています。

Select & Group By 句で名前付きパラメータを使用する SQL がある場合、Postgres はこれを不適切な文法として返します。パラメータを手動で置き換えてクエリを実行すると、正しく機能します。

「id」と「number」の 2 つの列を持つ「table」というテーブルがあるとします。

この 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 であ​​ることを認識していないため、「列 '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 に答える