私は 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)
代わりは?クエリプランナーはこれで大丈夫だと思います。